我正在尝试构建一个regex,它能够从字符串中提取所有类似Stackoverflow的标记。我的正则表达式出了点问题,我找不到它是什么:
s = 'call,me r c++ c# 132(list) 2345sdf;sdf_sfg? "adf-sdf aso.net?'
re.findall(r"[^,\s;\"\(\)]*[a-zA-Z0-9_\+\-\.#]*[a-zA-Z0-9_\+\-#]", s.lower())我得到了
['call',
'r',
'c++',
'c#',
'132',
'list',
'2345sdf',
'sdf_sfg',
'adf-sdf',
'aso.net']所以当你看到逗号消失后的"me“。我也愿意改进我的正则表达式。
编辑:我想匹配的模式是有效的SO标记,即a-za-z0-9_+-#集合中的所有字符。我的表达式的其余部分是将句子末尾的点排除在外,以及消除逗号的变通方法。
发布于 2013-12-20 02:07:02
>>> s = 'call,me r c++ c# 132(list) 2345sdf;sdf_sfg? "adf-sdf aso.net? foo. bar.'
>>> re.findall(r'\b\w[\w#+.-]*(?<!\.)', s)
['call', 'me', 'r', 'c++', 'c#', '132', 'list', '2345sdf', 'sdf_sfg', 'adf-sdf', 'aso.net', 'foo', 'bar']我需要标签开始后,一个字边界与一个字字符。在此之后,我还捕获了许多单词字符或我明确列出的字符(#+.-)。因此,如果要支持另一个字符,只需将其添加到字符类中即可。
末端的负后视防止标记以点结尾。
https://stackoverflow.com/questions/20695097
复制相似问题