难以让python正则表达式工作

时间:2014-09-12 20:00:33

标签: python regex

我试图为python设置一个正则表达式,以匹配任何非空白字符一次或多次,然后只要它以逗号开头,任何空白字符为零或更多次

到目前为止我一直试图使用的内容:

([+-])(\S(?:,\s*)*)+

我有一个字符串:"+foo, bar -baz" or "+foo,bar -baz"等,并想与群组("+", "foo,bar")("-", "baz")

进行两场匹配

4 个答案:

答案 0 :(得分:1)

这是我的尝试:

>>> regex = r"([+-])(\S+,\s*\S*|\S+$)"
>>> re.findall(regex, "+foo,   bar -baz")
[('+', 'foo,   bar'), ('-', 'baz')]

>>> re.findall(regex, "+foo,bar -baz")
[('+', 'foo,bar'), ('-', 'baz')]

要处理匹配字符串末尾的-baz,可以更轻松地将[+-]之后的匹配拆分为两个单独的|个案例。

修改:如果逗号并不总是存在,则正则表达式r"([+-])(\S+(?:,\s*\S*)|\S+$)"可能更合适。

答案 1 :(得分:1)

这对你有用吗?

>>> import re
>>> p = re.compile('([+-])(\w, ]+)')
>>> p.findall('+foo,   bar -baz')
[('+', 'foo,   bar '), ('-', 'baz')]
>>> p.findall('+foo,bar -baz')
[('+', 'foo,bar '), ('-', 'baz')]

如果你不想保留空格,试试这个:

>>> import re
>>> p = re.compile('([+-])(\w,]+)')
>>> tempString = '+foo,   bar -baz'
>>> p.findall(tempString.replace(' ', ''))
[('+', 'foo,bar'), ('-', 'baz')]

在这种情况下,不修改tempString,但删除空格然后尝试匹配

答案 2 :(得分:0)

匹配任意数量的空白字符,后跟

[^\s]+,

然后在你的代码中你可以写下:

>>> import re
>>> p = re.compile(r'[^\s]+,', re.MULTILINE)
>>> s = "+foo, bar -baz"
>>> [x.replace(',', '') for x in p.findall(s)]
['+foo']

答案 3 :(得分:0)

我不确定,但我认为你在寻找的是:

p = re.compile(r'^[+-]?[^\s,]+(?:, ?[+-]?[^\s,]+)*$')