python正则表达式分组
我的正则表达式目标: 如果句子中有一个“#”,则将所有内容分组到“#”的左侧,并将所有内容分组到“#”的右侧。如果角色没有“#”,则只需将整个句子作为一个组返回即可 这两种情况的例子:python正则表达式分组,python,regex,Python,Regex,我的正则表达式目标: 如果句子中有一个“#”,则将所有内容分组到“#”的左侧,并将所有内容分组到“#”的右侧。如果角色没有“#”,则只需将整个句子作为一个组返回即可 这两种情况的例子: A) '120x4#Words' -> ('120x4', 'Words') B) '120x4@9.5' -> ('120x4@9.5') 我制作了一个正则表达式,可以正确解析案例a (.*)(?:#(.*)) # List the groups found >>> r.gro
A) '120x4#Words' -> ('120x4', 'Words')
B) '120x4@9.5' -> ('120x4@9.5')
我制作了一个正则表达式,可以正确解析案例a
(.*)(?:#(.*))
# List the groups found
>>> r.groups()
(u'120x4', u'words')
但这当然对案例B不起作用——我需要将“#及其右边的所有内容”设置为可选
因此,我尝试在第二个分组上使用“?”“零或无”运算符来表示它是可选的。(.*)(?:#(.*)?
但它给了我糟糕的结果。第一个分组占用整个字符串
# List the groups found
>>> r.groups()
(u'120x4#words', None)
我可能误解了none或one“?”操作符及其在分组中的工作方式,或者我误解了第一个组是如何贪婪地抓住整个字符串的。我确实试着让第一组“不情愿”,但这让我完全没有对手
(.*?)(?:#(.*))?
# List the groups found
>>> r.groups()
(u'', None)
使用
re.split
:
>>> import re
>>> a='120x4#Words'
>>> re.split('#',a)
['120x4', 'Words']
>>> b='120x4@9.5'
>>> re.split('#',b)
['120x4@9.5']
>>>
使用
re.split
:
>>> import re
>>> a='120x4#Words'
>>> re.split('#',a)
['120x4', 'Words']
>>> b='120x4@9.5'
>>> re.split('#',b)
['120x4@9.5']
>>>
这将起作用。请参阅演示
这将起作用。请参阅演示
只需使用标准功能:
s = '120x4#Words'
x = s.split( '#' )
如果仍然需要正则表达式解决方案,请使用以下模式:
([^#]+)(?:#(.*))?
只需使用标准功能:
s = '120x4#Words'
x = s.split( '#' )
如果仍然需要正则表达式解决方案,请使用以下模式:
([^#]+)(?:#(.*))?
这里有一个详细的
re
解决方案。但是,您最好使用str.split
import re
REGEX = re.compile(r'''
\A
(?P<left>.*?)
(?:
[#]
(?P<right>.*)
)?
\Z
''', re.VERBOSE)
def parse(text):
match = REGEX.match(text)
if match:
return tuple(filter(None, match.groups()))
print(parse('120x4#Words'))
print(parse('120x4@9.5'))
这里有一个详细的
re
解决方案。但是,您最好使用str.split
import re
REGEX = re.compile(r'''
\A
(?P<left>.*?)
(?:
[#]
(?P<right>.*)
)?
\Z
''', re.VERBOSE)
def parse(text):
match = REGEX.match(text)
if match:
return tuple(filter(None, match.groups()))
print(parse('120x4#Words'))
print(parse('120x4@9.5'))
哇,这也是一个测试正则表达式的好网站——感谢lotWow,这也是一个测试正则表达式的好网站——非常感谢
str.split
的+1,尽管正则表达式只相当于字符串中最多出现一次
。+1表示str.split
,虽然正则表达式仅在字符串中最多出现1次#
时等效…是的,我同意拆分更整洁。就在今晚,我正在试验正则表达式。。。详细的修饰符看起来可以在将来帮我省去一些调试的麻烦…是的,我同意拆分更整洁。就在今晚,我正在试验正则表达式。。。详细修饰符看起来可以在将来帮我省去一些调试的麻烦。。。。