我希望有人能帮我在Python3中使用正则表达式(3.6.2)

时间:2018-01-05 21:54:39

标签: python regex

我从一个文件中读取记录,这些记录是我想要分成几部分的数据字符串。我的新版块始终以<xxx>开头,其中xxx是任意三个字母字符。每个部分的长度可以不同。

下面列出的是数据的示例摘录

<AAA>q2w *dc<BBB>12sd<CCC>wer(4rf) q w ddcd<DDD> w erdfWED#2w

无论我使用何种模式,我都无法按照自己的意愿打破字符串。我要么得到整个字符串,要么只得到部分标识符(<xxx>)和下一个字符。

下面列出的是我尝试过的结果后面的一些模式:

matchLn1 = re.findall('(<\w{3}>.*)','<AAA>q2w *dc<BBB>12sd<CCC>wer(4rf) q w ddcd<DDD> w erdfWED#2w')
['<AAA>q2w *dc<BBB>12sd<CCC>wer(4rf) q w ddcd<DDD> w erdfWED#2w']

matchLn1 = re.findall('(<\w{3}>.*?)','<AAA>q2w *dc<BBB>12sd<CCC>wer(4rf) q w ddcd<DDD> w erdfWED#2w')<br/>
['<AAA>', '<BBB>', '<CCC>', '<DDD>']

matchLn1 = re.findall('(<\w{3}>.+?)','<AAA>q2w *dc<BBB>12sd<CCC>wer(4rf) q w ddcd<DDD> w erdfWED#2w')<br/>
['<AAA>q', '<BBB>1', '<CCC>w', '<DDD> ']

matchLn1 = re.findall('(<\w{3}>.?)','<AAA>q2w *dc<BBB>12sd<CCC>wer(4rf) q w ddcd<DDD> w erdfWED#2w')<br/>
['<AAA>q', '<BBB>1', '<CCC>w', '<DDD> ']

我也尝试了其他一些模式,但结果总是一样的。任何/所有的想法都会受到欢迎。

谢谢

1 个答案:

答案 0 :(得分:0)

您可以像这样使用split()。

import re
text ='<AAA>q2w *dc<BBB>12sd<CCC>wer(4rf) q w ddcd<DDD> w erdfWED#2w'
p = re.compile("<\w{3}>")
print (p.split(text))

['', 'q2w *dc', '12sd', 'wer(4rf) q w ddcd', ' w erdfWED#2w']

更新以回应评论: 您可以像这样捕获分隔符:

import re
text ='<AAA>q2w *dc<BBB>12sd<CCC>wer(4rf) q w ddcd<DDD> w erdfWED#2w'
p = re.compile(r"(<[a-zA-Z]{3}>)")
print (p.split(text))

输出:

['', '<AAA>', 'q2w *dc', '<BBB>', '12sd', '<CCC>', 'wer(4rf) q w ddcd', '<DDD>', ' w erdfWED#2w']