我使用正则表达式在字符串中查找长度为 6 的字母数字。字符串如下所示:
PLT\n\nTRAVELLER NAME LIST\n\n TRAVELLER RECLOC COMPANY\n 1 TESTNUMBERFIVEQA/TESTN WL9795\n 2 TESTNUMBERONEYQWA/TEST RHFQCD\n 3 TESTNUMBERONEYQWAZZZ/T 1QZ1JF\n 4 TESTNUMBERONEYQWAZZZM/ N3BZW8\n 5 TESTNUMBERONEYQWAZZZMK 05RXPM\n 6 TESTNUMBERONEYQWAZZZMK 2XR9ZR\n 7 TESTNUMBERTHREEZZZ/TES 0Q14S4\n 8 TESTNUMBERTHREEZZZM/TE LRRKW3\n 9 TESTNUMBERTHREEZZZMK/T 949Z4T\n 10 TESTNUMBERTHREEZZZMKJ/ 51WFM2\n 11 TESTNUMBERTWOZZA/TESTN PRGWVT\n 12 TESTNUMBERTWOZZAZZZ/TE SM0BHS\n 13 TESTNUMBERTWOZZAZZZM/T QRJLH1\n 14 TESTNUMBERTWOZZAZZZMK/ R69NHV\n 15 TESTNUMBERTWOZZAZZZMKJ 67XKF7\n 16 TESTNUMBERTWOZZAZZZMKJ 68PV7P\n 17 TESTNUMBERTWOZZAZZZMKJ GCZZ0C\n)> 18 TESTNUMBERTWOZZAZZZMKJ MLMS3L\n 19 TESTNUMBERTWOZZAZZZMKJ 3R1S49\n 20 TESTNUMBERTWOZZAZZZMKJ WB700R\n 21 TESTNUMBERTWOZZAZZZMKJ 718KRC\n 22 TESTNUMBERTWOZZAZZZMKJ RTQH2H\n 23 TESTNUMBERTWOZZAZZZMKJ N2FLM6\n 24 TESTNUMBERTWOZZAZZZMKJ 40M1FR\n 25 TESTNUMBERTWOZZAZZZMKJ 71D3HF\n 26
我试过的正则表达式是这样的:
for k in mainString:
m = re.match('([0-9A-Z]{6})', k)
if (m):
do something
但它没有按预期工作。有人可以指出我可能犯错的地方吗? 我正在寻找的模式是像 WL9795、RHFQCD 等。
谢谢
最佳答案
match
方法只检查字符串开头的匹配项。
改用搜索
方法!
此外,()
是不必要的。
如果代码中的 mainString
实际上是问题顶部的字符串,那么您的代码将无法正常工作,因为 for
循环将遍历所有该字符串中的单个字符。
相反你可以使用
m = re.search(r'\b[0-9A-Z]{6}\b', mainString)
if (m):
print(m.group())
正则表达式之前的 r
确保 \b
不被视为字符串转义序列。
\b
表示单词边界,并确保 6 个字符的字母数字前后没有单词字符。如果没有它们,第一个匹配项将是 “TRAVELLER”
中的 “TRAVEL”
。
如果您想获得所有匹配项的列表,请使用 findall
或 finditer
而不是 search
。
for m in re.finditer(r'\b[0-9A-Z]{6}\b', mainString):
print(m.group())
关于python - 用于在字符串中查找字母数字模式的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16043699/