我编写了以下正则表达式模式:
import re
pattern = re.compile(r"([^\w]*)(\w*)([^\w]*)")
此模式的预期目标基本上是将单词(由(\w*)
表示)与其他“空格”字符(由([^\w*])
表示)序列分开。如果没有单词,它将仍然捕获匹配字符串中的所有其他字符,这就是在*
中而不是(\w*)
中使用+
的原因。
它照常工作,但是由于每个组中的*
,pattern.findall(string)
(其中string
是要匹配的任何字符串)也包含元组('', '', '')
—即其中每个组都是一个空字符串。例如,pattern.findall("/@This -&is//#a - string&&")
返回[('/@', 'This', ' -&'), (' -&', 'is', '//#'), ('//#', 'a', ' - '), (' - ', 'string', '&&'), ('', '', '')]
。
有没有一种方法可以确保它不与“空”字符串匹配,同时又能保持当前功能?我可以从列表中删除最后一个元组,但是我敢肯定还有一个更优雅的解决方案。
我尝试过
pattern = re.compile(r"(?:^([^\w]+$))|(?:([^\w]*)(\w+)([^\w]*))")
但是它没有按预期工作。