/ / Regex извлича текст в символите '**' - python, regex

Regex извлича текст в "**" знаците - python, regex

Имам нужда от regex за извличане на дума от многото ** знака. Знам, че това е тривиално за regux gurus ... Аз просто имам някои трудности с него.

 phrase = re.search("*.*(w.*)*", message.text).group(1)

Отговори:

1 за отговор № 1

За текст между произволни числа от * "s, използвайте:

phrase = re.search(r"*+(w+)*", message.text).group(1)

Имайте предвид, че r отляво на низ като r"string" означава, че низът е напълно буквален и не е необходимо допълнително излизане отвъд нормалното избягване на regex.

Ако искате да съвпаднете само с съвпадения набор от стартирания (**this** но не ***this** или *this**) след това използвайте:

phrase = re.search(r"(?<!*)(*+)(w+)1(?!*)", message.text).group(2)

Да обясни:

  • (?<!*) е отрицателен поглед назад, казвайки, че regex не може да започне веднага след звезда, тъй като тогава тази звезда нямаше да бъде включена.
  • 1 съответства на същия брой звезди като първата група.
  • (?!*) е отрицателен поглед напред, който казва, че не може да има повече звезди веднага след последната звезда в 1 група.
  • Групите за разглеждане са групи, които не съвпадат с нулева дължина, което означава, че не се броят в тях re.search(...).group()броене на групи.

За да направите всичко това за всеки случай в низ, използвайте нещо като:

phrases = [r[1] for r in re.findall(r"(?<!*)(*+)(w+)1(?!*)", message.text)]

0 за отговор № 2

Близо. Мисля, че трябва да избягате от обратната наклонена черта и да премахнете някои .

phrase = re.search("\**(\w+)\*", message.text).group(1)

0 за отговор № 3

Какво ще кажеш: *+(w+)*+

Търси един или повече * и след това един или повече символи от думи и след това един или повече *

Вижте го в действие.


0 за отговор № 4
>>> example_string = "** **hello_123** ****"
>>> phrase = re.search("*+(w+)*+", message.text).group(1)
>>> phrase
"hello_123"

Това също работи добре, когато между звездичките няма празно пространство.