我试图为python设置一个正则表达式,以匹配任何非空白字符一次或多次,然后只要它以逗号开头,任何空白字符为零或更多次
到目前为止我一直试图使用的内容:
([+-])(\S(?:,\s*)*)+
我有一个字符串:"+foo, bar -baz" or "+foo,bar -baz"
等,并想与群组("+", "foo,bar")
和("-", "baz")
答案 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,]+)*$')