繁体   English   中英

在python正则表达式中如何在前瞻性断言中使用*?

[英]in python regex How to use * in lookahead assertion?

我有这两个字符串,

s='MayaWindow|toolBar2|MainShelfLayout|formLayout14|frameLayout4|formLayout15||guiHelperMenu'

t='MayaWindow|toolBar2|MainShelfLayout|formLayout14|frameLayout4|formLayout15|guiHelperMenu'

唯一的区别是| || 部分放在字符串末尾,如何用正则表达式||guiHelperMenu |guiHelperMenu||guiHelperMenu部分? 到目前为止,我已经尝试过

re.search('^.*(?=\|)',s).group()
'MayaWindow|toolBar2|MainShelfLayout|formLayout14|frameLayout4|formLayout15|'

如何支持两个|| 并在两种情况下都返回'MayaWindow|toolBar2|MainShelfLayout|formLayout14|frameLayout4|formLayout15

编辑:发布此两分钟后,我想通了... http://rubular.com/r/zcFGLxzfcu

您可以将此正则表达式用于sub

>>> re.sub(r'\|+[^|]+$', '', s)
'MayaWindow|toolBar2|MainShelfLayout|formLayout14|frameLayout4|formLayout15'
>>> re.sub(r'\|+[^|]+$', '', t)
'MayaWindow|toolBar2|MainShelfLayout|formLayout14|frameLayout4|formLayout15'

或使用search

>>> re.search(r'.*?(?=\|+[^|]*$)', s).group()
'MayaWindow|toolBar2|MainShelfLayout|formLayout14|frameLayout4|formLayout15'
>>> re.search(r'.*?(?=\|+[^|]*$)', t).group()
'MayaWindow|toolBar2|MainShelfLayout|formLayout14|frameLayout4|formLayout15'

要获得最后一部分,可以使用捕获组,该捕获组将从两个输入中返回相同的字符串:

>>> re.search(r'\|([^|]+)$', s).group(1)
'guiHelperMenu'
>>> re.search(r'\|([^|]+)$', t).group(1)
'guiHelperMenu'

否则使用后置正则表达式:

>>> re.search(r'(?<=\|)[^|]+$', s).group()
'guiHelperMenu'
>>> re.search(r'(?<=\|)[^|]+$', t).group()
'guiHelperMenu'

如果您只想剥离guiHelperMenu部分,那么您就可以这样做。 只需使用re.sub

>>> re.sub('\|+guiHelperMenu$', '', s)
'MayaWindow|toolBar2|MainShelfLayout|formLayout14|frameLayout4|formLayout15'
>>> re.sub('\|+guiHelperMenu$', '', t)
'MayaWindow|toolBar2|MainShelfLayout|formLayout14|frameLayout4|formLayout15'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM