Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.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正则表达式句子过滤_Python_Regex - Fatal编程技术网

Python正则表达式句子过滤

Python正则表达式句子过滤,python,regex,Python,Regex,我想过滤下面的句子 'I'm using C++ in high-tech applications!', said peter (in a confident way) 将其转换为单个单词以获得 I'm using C++ in high-tech applications said peter in a confident way 到目前为止,我得到的是 parsing=re.findall(r"\w+(?:[-']\w+)*|'|[-.(]+|\S\w*",text) ' '.join

我想过滤下面的句子

'I'm using C++ in high-tech applications!', said peter (in a confident way)
将其转换为单个单词以获得

I'm using C++ in high-tech applications said peter in a confident way
到目前为止,我得到的是

parsing=re.findall(r"\w+(?:[-']\w+)*|'|[-.(]+|\S\w*",text)
' '.join(w for w in parsing if w not in string.punctuation)
然而,这产生了

I'm using C in high-tech applications said peter in a confident way
因此,“C++”不正确地变成了“C”,因为“+”在string.标点符号中。我是否可以修改正则表达式代码,使“+”不被标记化?任何获得所需输出的替代方法也将受到欢迎,谢谢

只需使用
(\w | \+)
而不是
\w
。这将同时使用单词字符和加号

或者,您可以使用
[a-zA-Z+]
或Kyle Strand建议的理想的
[\w+]

只需使用
(\w\124;\+)
而不是
\w
。这将同时使用单词字符和加号


或者,您可以使用Kyle Strand建议的
[a-zA-Z+]
或理想情况下的
[\w+]

类似于C0deH4cker的答案,但稍微简单一点,将
\w
的所有实例替换为
[\w+]

>>> parsing=re.findall(r"[\w+]+(?:[-'][\w+]+)*|'|[-.(]+|\S[\w+]*",text)
>>> parsing
["'", "I'm", 'using', 'C++', 'in', 'high-tech', 'applications', '!', "'", ',', 'said', 'peter', '(', 'in', 'a', 'confident', 'way', ')']
>>> ' '.join(w for w in parsing if w not in string.punctuation)
"I'm using C++ in high-tech applications said peter in a confident way"
请注意,您最初的解决方案将“C++”拆分为三个不同的标记,因此即使从
字符串中排除
++
。标点符号也无法解决您的问题:

>>> parsing=re.findall(r"\w+(?:[-']\w+)*|'|[-.(]+|\S\w*",text)
>>> parsing
["'", "I'm", 'using', 'C', '+', '+', 'in', 'high-tech', 'applications', '!', "'", ',', 'said', 'r', '(', 'in', 'a', 'confident', 'way', ')']

与C0deH4cker的答案类似,但稍微简单一点,将
\w
的所有实例替换为
[\w+]

>>> parsing=re.findall(r"[\w+]+(?:[-'][\w+]+)*|'|[-.(]+|\S[\w+]*",text)
>>> parsing
["'", "I'm", 'using', 'C++', 'in', 'high-tech', 'applications', '!', "'", ',', 'said', 'peter', '(', 'in', 'a', 'confident', 'way', ')']
>>> ' '.join(w for w in parsing if w not in string.punctuation)
"I'm using C++ in high-tech applications said peter in a confident way"
请注意,您最初的解决方案将“C++”拆分为三个不同的标记,因此即使从
字符串中排除
++
。标点符号也无法解决您的问题:

>>> parsing=re.findall(r"\w+(?:[-']\w+)*|'|[-.(]+|\S\w*",text)
>>> parsing
["'", "I'm", 'using', 'C', '+', '+', 'in', 'high-tech', 'applications', '!', "'", ',', 'said', 'r', '(', 'in', 'a', 'confident', 'way', ')']

您指的是哪个\w?有三种them@user1893354都是。
(\w | \+)
将匹配普通单词以及包含加号的单词,但使用@KyleStrand的
[\w+]
更好。您指的是哪个\w?有三种them@user1893354都是。
(\w | \+)
将匹配普通单词以及包含加号的单词,但使用@KyleStrand的
[\w+]
更好。