/ / Python: Regex Search - python, regex, delimiter

Python: Regex Search - python, regex, delimiter

Chciałem podzielić zdanie na wiele ograniczników:

.?! n

Jednak chcę zachować przecinek wraz ze słowem. Na przykład dla ciągu

"Hi, How are you?"

Chcę wyniku

["Hi,", "How", "are", "you", "?"]

Próbowałem następujące, ale nie uzyskanie wymaganych wyników

words = re.findall(r"w+|W+", text)

Odpowiedzi:

4 dla odpowiedzi № 1

re.split i zachowaj separatory, a następnie odfiltruj ciągi, które zawierają tylko spacje.

>>> import re
>>> s = "Hi, How are you?"
>>> [x for x in re.split("(s|!|.|?|n)", s) if x.strip()]
["Hi,", "How", "are", "you", "?"]

2 dla odpowiedzi nr 2

Jeśli używasz re.findall:

>>> ss = """
... Hi, How are
...
... yo.u
... do!ing?
... """
>>> [ w for w in re.findall("(w+,?|[.?!]?)?s*", ss) if w ]
["Hi,", "How", "are", "yo", ".", "u", "do", "!", "ing", "?"]

0 dla odpowiedzi № 3

Możesz użyć:

re.findall("(.*?)([s.?!n])", text)

Przy odrobinie magii itertools i rozumienia list:

[i.strip() for i in itertools.chain.from_iterable(re.findall("(.*?)([s.?!n])", text)) if i.strip()]

I nieco bardziej zrozumiała wersja:

words = []
found = itertools.chain.from_iterable(re.findall("(.*?)([s.?!n])", text)
for i in found:
w = i.strip()
if w:
words.append(w)