регулярное выражение для слов, которые не начинаются с дефиса в python

#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']