Поиск строки в строгом формате - PullRequest
0 голосов
/ 09 ноября 2019

Я хочу найти подстроку, используя библиотеку python re в следующем формате:

(some word)(\)term1(\)(some word) (some word)(\)term2(\)(some word)

Группы в скобках необязательны, term1 и term2 должны быть в строке в этом формате.

Несколько примеров того, что он должен обнаружить:

  • random sentence word\term1 term2 end of random sentence
  • random sentence term1 term2 end of random sentence
  • random sentence word\term1\word word\term2\word end of random sentence

пока я пробовал это:

r'((\W+|^)term1((\W))*)(\w+|) (\w+|)(\W|)term2(\W|)'

но это не работает

Ответы [ 2 ]

0 голосов
/ 09 ноября 2019
import re

lines = [
    r'random sentence word\term1 term2 end of random sentence',
    r'random sentence term1 term2 end of random sentence',
    r'random sentence word\term1\word word\term2\word end of random sentence'
]

regex = re.compile(r'(\b\w+\b)?\\?term1\\?(\b\w+\b)? (\b\w+\b)?\\?term2\\?(\b\w+\b)?')
for line in lines:
    m = regex.search(line)
    if m:
        print('Match:', m.group(0))
    else:
        print("No match")

Отпечатки:

Match: word\term1 term2
Match: term1 term2
Match: word\term1\word word\term2\word

enter image description here

0 голосов
/ 09 ноября 2019

Этот шаблон должен работать:

^[\w ]*\\?term1\\?[\w ]*\\?term2\\?[\w ]*$

Демонстрация Python:

import re

pattern = re.compile(r"^[\w ]*\\?term1\\?[\w ]*\\?term2\\?[\w ]*$")

string1 = r"random sentence word\term1 term2"
string2 = r"random sentence term1 term2 end of random sentence"
string3 = r"random sentence word\term1\word word\term2\word end of random sentence"

print(bool(re.search(pattern, string1)))
print(bool(re.search(pattern, string2)))
print(bool(re.search(pattern, string3)))

Вывод:

True
True
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...