我有一个字符串:
test2 = "-beginning realization 5 -singlespace -multispaceafter not-this-one -whitespace\t\n -end"
我希望找到所有以减号( - )开头的子串。
我可以找到所有“但是”最后一次出现:
re.findall(ur"\B-(.*?)\s", test2)
返回[u'beginning', u'singlespace', u'multispaceafter', u'whitespace']
我可以找到“最后一次出现”:
re.findall(ur"\B-(.*?)\Z", test2)
返回[u'end']
但是,我想要一个返回
的正则表达式[u'beginning',u'singlespace',u'multispaceafter',u'whitespace',u'end']
答案 0 :(得分:3)
您可以使用非捕获组断言空格或字符串末尾。
>>> re.findall(r'\B-(.*?)(?:\s|$)', test2)
虽然我代替\B
和非捕获组推荐以下内容:
>>> re.findall(r'(?<!\S)-(\S+)', test2)
答案 1 :(得分:2)
您也可以尝试以下代码,
>>> test2 = "-beginning realization 5 -singlespace -multispaceafter not-this-one -whitespace\t\n -end"
>>> m = re.findall(r'(?:\s|^)-(\S+)', test2)
>>> m
['beginning', 'singlespace', 'multispaceafter', 'whitespace', 'end']
答案 2 :(得分:1)
答案 3 :(得分:1)
结束不匹配,因为你在正则表达式中强制使用空格。
尝试:
# (?:^|\s)-(.*?)(?=\s|$)
(?: ^ | \s )
-
( .*? )
(?= \s | $ )