Python Regex查找所有分隔的子字符串

时间:2014-09-14 16:45:10

标签: python regex string findall

我有一个字符串:

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']

4 个答案:

答案 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)

(?<=\s)-(.*?)(?=\s|$)|(?<=^)-(.*?)(?=\s|$)

试试这个。看看演示。

http://regex101.com/r/cN7qZ7/6

答案 3 :(得分:1)

结束不匹配,因为你在正则表达式中强制使用空格。

尝试:

 # (?:^|\s)-(.*?)(?=\s|$)

 (?: ^ | \s )
 -
 ( .*? )
 (?= \s | $ )