Имам нужда от 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"
Това също работи добре, когато между звездичките няма празно пространство.