Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:Regex搜索_Python_Regex_Delimiter - Fatal编程技术网

Python:Regex搜索

Python:Regex搜索,python,regex,delimiter,Python,Regex,Delimiter,我想在多个分隔符上拆分一个句子: \n 但是,我想保留逗号和单词。 例如字符串 'Hi, How are you?' 我想要结果 ['Hi,', 'How', 'are', 'you', '?'] 我尝试了以下方法,但没有得到所需的结果 words = re.findall(r"\w+|\W+", text) 您可以使用: re.findall('(.*?)([\s\.\?!\n])', text) 通过一点itertools魔术和列表理解: [i.strip() for i in it

我想在多个分隔符上拆分一个句子:

\n

但是,我想保留逗号和单词。 例如字符串

'Hi, How are you?'
我想要结果

['Hi,', 'How', 'are', 'you', '?']
我尝试了以下方法,但没有得到所需的结果

words = re.findall(r"\w+|\W+", text)
您可以使用:

re.findall('(.*?)([\s\.\?!\n])', text)
通过一点itertools魔术和列表理解:

[i.strip() for i in itertools.chain.from_iterable(re.findall('(.*?)([\s\.\?!\n])', text)) if i.strip()]
还有一个更容易理解的版本:

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

re.split
并保留分隔符,然后过滤掉只包含空格的字符串

>>> import re
>>> s = 'Hi, How are you?'
>>> [x for x in re.split('(\s|!|\.|\?|\n)', s) if x.strip()]
['Hi,', 'How', 'are', 'you', '?']
如果使用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', '?']

我想线索可能在你的问题中-试着使用
re.split
,例如
re.split(r'\s+',text)
?你想在每个单词上只加逗号吗?你对标点符号的标准是什么?你什么时候分开,什么时候不分开?如果你想保持昏迷状态,也许你可以试试这个:re.findall(r“\w+[,]*”,t)我想在出现空格时分开句子。由于逗号附加在单词hi上,因此它应与hi一起显示。但是,出现在句子末尾的“!”?“换行符”等分隔符应被视为一个单词,并将其拆分。信息应在您的问题中使用re.findall(“(.*?”([\s\.\?!\n]),text),我得到以下输出:[(“嗨,”)(“如何,”,(“是”,“是”,“你”,“是”)]是的,接下来必须过滤输出,但是,请看timgeb的答案,了解更好的版本。