我试图在一个更大的字符串中找到一个特定的字符串。
下面是字符串,粗体的单词是我想要使用python的re库中的re.findall函数提取的。
text|p1_1_SNtestfilefri01|ANTENNA SYSTEM|@|text|p1_2_SNtestfilefri01|ALCATEL-LUCENT|@|text|p1_3_SNtestfilefri01|MW ANTENNA|@|text|p1_4_SNtestfilefri01|DIA 0.6M 13 GHZ单POLARIZED|@|text|p1_5_SNtestfilefri01|L1AF10018AAAA|@|text|p1_6_SNtestfilefri01|SNtestfilefri01
这是我的密码:
open_file = open(filepath, mode='r')
doc = open_file.read()
datas = re.findall('\|(.*)\|\@\|', doc)
print(datas)这是输出:
SYSTEM|@|text|p1_2_SNtestfilefri01|ALCATEL-LUCENT|@|text|p1_3_SNtestfilefri01|MW 'p1_1_SNtestfilefri01|ANTENNA ANTENNA|@|text|p1_4_SNtestfilefri01|DIA 0.6M 13 GHZ单片POLARIZED|@|text|p1_5_SNtestfilefri01|L1AF10018AAAA‘
正确的模式是什么,这样我才能得到这样的结果?:
‘天线系统’,‘阿尔卡特朗讯’,'MW天线‘,'DIA 0.6M 13 GHZ单极化’,'L1AF10018AAAA','SNtestfilefri01‘
另外,我前面提到的字符串不包含任何换行符(所有内容都在一行中)。
发布于 2019-11-26 06:24:03
re.findall('[^|]+(?=\|\@\|)', doc)解释:
不包含
[^|]+finds的文本块是一个“前瞻性断言”(匹配文本,但结果中不包括)发布于 2019-11-26 07:01:31
这是一个肮脏的解决方案,但我的头上却是工作:
import re
s = "text|p1_1_SNtestfilefri01|ANTENNA SYSTEM|@|text|p1_2_SNtestfilefri01|ALCATEL-LUCENT|@|text|p1_3_SNtestfilefri01|MW ANTENNA|@|text|p1_4_SNtestfilefri01|DIA 0.6 M 13 GHZ SINGLE POLARIZED|@|text|p1_5_SNtestfilefri01|L1AF10018AAAA|@|"
s = s.split('@')
match_list = []
for data in s:
data += "@|"
m = re.search('\|(.*)\|(.*)\|\@\|', data)
if m:
match_list.append(m.group(2))https://stackoverflow.com/questions/59044758
复制相似问题