#python #nsregularexpression
Вопрос:
Мне нужно сделать регулярное выражение для слов на python. Я получаю предложение, и мне нужно проверить, есть ли в нем слова.
Слова «Привет», «Это» будут в списке. Слов «—Мама » или «-Мама» в списке не будет. Но «Мама» будет в списке, потому что оно отделяет » — » от «Мамы», поэтому «Мама» рассмотрит «Слово» Как я могу получить это слово, которое начинается с» -«, а не как «Слово», например «- Мама»?
def getWord(): return"((^[A-Z])?[a-z] )((-[a-z]*)*)(')?[a-z]{0,2}" text=r"""Hello Bob! It's Mary, your mother-in-law, the mistake is your parents'! --Mom""") com = re.compile(rf"""((?Plt;WORDgt;{getWord()})), """,re.MULTILINE | re.IGNORECASE | re.VERBOSE | re.UNICODE) lst=[(v, k) for match in com.finditer(text) for k, v in match.groupdict().items() if v is not None and k != 'SPACE'] print(lst)
Ответ №1:
Возможно, вы слишком усложняете это, и регулярное выражение «найти весь поиск w
» уже близко подходит к тому, что вы здесь хотите. Чтобы разрешить обладание, просто сделайте 's
необязательное окончание после каждого слова. Кроме того, чтобы исключить слова, которым не предшествуют пробелы (или которые находятся в самом начале строки), мы можем начать с отрицательного взгляда сзади (?lt;!S)
.
text = "Hello Bob! It's Mary, your mother-in-law, the mistake is your parents! --Mom" words = re.findall(r"(?lt;!S)w (?:'s)?", text) print(words)
Это печатает:
['Hello', 'Bob', "It's", 'Mary', 'your', 'mother', 'in', 'law', 'the', 'mistake', 'is', 'your', 'parents']