为了账号安全,请及时绑定邮箱和手机立即绑定

我正在尝试从 python 正则表达式解析字符串 - 当字符串包含“:”时无法解析

我正在尝试从 python 正则表达式解析字符串 - 当字符串包含“:”时无法解析

拉风的咖菲猫 2023-06-27 16:08:51
我有string = ":61:2002190219C45612.4S202EXCOL3654628815//CT56748005:86:/BENM/Unitech Imports/REM//58970.047:61:2002190219C30000S103LCADV5674920204//CT56748006:86:/BENM/Gravity Imports/REM//INV/FEB20/446301"pattern = "61:[A-Za-z0-9 \/,\-_\.]{1,}:86:[A-Za-z0-9 \/\.\-]{1,}"re.findall(pattern , string) # - > this is giving list with 2 element 但是当字符串中有“:”"61:[A-Za-z0-9 \/,\-_\.:]{1,}:86:[A-Za-z0-9 \/\.\-:]{1,}"时,我将正则表达式修改为,然后它在一个列表中给出完整的内容。modified_string = ":61:2002190219C45612.4S202EXCOL:3654628815//CT56748005:86:/BENM/Unitech Imports/REM//58970.047:61:2002190219C30000S103LCAD:V5674920204//CT56748006:86:/BENM/Gravity Imports/REM//INV/FEB20/446301"我尝试了多种选项,但无法获得所需的输出。预期产出re.findall(pattern,modified_string)# => ['61:2002190219C45612.4S202EXCOL:3654628815//CT56748005:86:/BENM/Unitech Imports/REM//58970.047','61:2002190219C30000S103LCAD:V5674920204//CT56748006:86:/BENM/Gravity Imports/REM//INV/FEB20/446301' ]
查看完整描述

2 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

由于模式以 开头并且61:仅出现一次:81:,因此您可以使用交替来匹配字符类中列出的任何字符,或者仅在不直接后跟或使用否定前瞻时[A-Za-z0-9 \/,_.-]匹配 a 。:61:86:

61:(?:[\w /,.-]|:(?!61:|86:))*:86:(?:[A-Za-z0-9 /.-]|:(?!61:|86:))*

正则表达式演示


查看完整回答
反对 回复 2023-06-27
?
MM们

TA贡献1886条经验 获得超2个赞

冒号似乎是表明匹配已结束的唯一指示符,因此允许冒号成为匹配的一部分会删除分隔符。也就是说,您可以通过将量词更改{1,}为非贪婪(即返回最短的可能匹配而不是最长的匹配)来获得所需的结果。一般来说,这是一个有点老套的解决方案,表明您可能需要重新考虑您的解析策略。但是如果你?在each后面添加一个{1,},你会再次得到两个匹配。


另外,您可以缩短{1,}为+.


pattern = re.compile(r"61:[A-Za-z0-9 \/,\-_\.:]+?:86:[A-Za-z0-9 \/\.\-:]+?")

pattern.findall(string)

#=> ['61:2002190219C45612.4S202EXCOL3654628815//CT56748005:86:/',

     '61:2002190219C30000S103LCADV5674920204//CT56748006:86:/']


查看完整回答
反对 回复 2023-06-27
  • 2 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信