找到更好的方法来查找字符串中包含多个相同符号的文本
find better way to find the text in string contains multi same signs
我有下面的文本,每个信息(文本和长度)都在“|”之间时间不同,只是“|”的个数不同是固定的。我可以检索我想要的信息(“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+ 次
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
无需使用正则表达式:
text="{@BATCH|ABCDEF|01|12|1||XYZGM|210401113439|online|ATGHDGV03|QGH83826|RevA|||"
if text.startswith("{@"):
print(text[2:].split("|")[6])
确保开头有{@
个文本,其余用|
分割,得到第6个值
我有下面的文本,每个信息(文本和长度)都在“|”之间时间不同,只是“|”的个数不同是固定的。我可以检索我想要的信息(“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+ 次
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
无需使用正则表达式:
text="{@BATCH|ABCDEF|01|12|1||XYZGM|210401113439|online|ATGHDGV03|QGH83826|RevA|||"
if text.startswith("{@"):
print(text[2:].split("|")[6])
确保开头有{@
个文本,其余用|
分割,得到第6个值