首页 > 解决方案 > 找到更好的方法来查找字符串中的文本包含多个相同的符号

问题描述

我有下面的文本,每个信息(文本和长度)在“|”之间 时间不同,只有“|”的个数 是固定的。我可以检索我想要的信息(“XYZGM”)但是我们有更好的方法吗?

"@BATCH|ABCDEF|01|12|1||XYZGM|210401113439|online|ATGHDGV03|QGH83826|RevA|||"

我使用的当前代码:

text="{@BATCH|ABCDEF|01|12|1||XYZGM|210401113439|online|ATGHDGV03|QGH83826|RevA|||"
# get text from 6th position to 7th position of "|"
pos_count=0
z=0
for i in range(z,len(text)):
    pos=text.find('|', z, len(text))
    if pos>0:
        pos_count+=1
        z=pos+1
    if pos_count==6:
        x=pos+1
    if pos_count==7:
        y=pos
        break
print("X: {}, Y: {}".format(x,y))
result=text[x:y]
print(result)

结果是:“XYZGM”

标签: python-3.xregexsearchcount

解决方案


另一种选择可能是使用模式:

^{@(?:[^|]*\|){6}([^|]+)
  • ^字符串的开始
  • {@匹配{@
  • (?:[^|]*\|){6}重复 6 次任何字符,除了|然后匹配|
  • ([^|]+)捕获组 1,匹配 1 次以上的任何字符,除了|

正则表达式演示

import re

pattern = r"^{@(?:[^|]*\|){6}([^|]+)"
s = "{@BATCH|ABCDEF|01|12|1||XYZGM|210401113439|online|ATGHDGV03|QGH83826|RevA|||"

match = re.match(pattern, s)
if match:
    print(match.group(1))

输出

XYZGM

推荐阅读