找到更好的方法来查找字符串中包含多个相同符号的文本



我在下面有一个文本,每个信息(文本和长度(在"由于时间不同|"是固定的。我可以检索我想要的信息("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";

另一个选项可以使用模式:

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

Regex演示

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

无需使用regex:

text="{@BATCH|ABCDEF|01|12|1||XYZGM|210401113439|online|ATGHDGV03|QGH83826|RevA|||"
if text.startswith("{@"):
print(text[2:].split("|")[6])

确保开头有{@文本,用|分割其余部分,得到第六个值。

Python代码

最新更新