在字符串中查找字母数字模式的正则表达式

2024-09-29 00:16:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有正则表达式来查找字符串中长度为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

我尝试过的正则表达式是这样的:

^{pr2}$

但它并没有如预期的那样工作。有人能指出我可能犯了什么错误吗? 我要找的模式是像WL9795,RHFQCD等

谢谢


Tags: 字符串name字母plt数字listtetraveller
2条回答

match方法只检查字符串开头的匹配项。在

改用search方法!在

而且,()是不必要的。在

如果代码中的mainString实际上是问题顶部的字符串,那么代码将无法正常工作,因为for循环将遍历该字符串中的所有单个字符。在

你可以用

m = re.search(r'\b[0-9A-Z]{6}\b', mainString)
if (m):
    print(m.group())

regex前面的r确保\b不被视为字符串转义序列。在

\b表示单词边界,并确保6个字符的字母数字前面或后面不跟单词字符。没有它们,第一个匹配项将是"TRAVELLER"中的"TRAVEL"。在

如果要获得所有匹配项的列表,请使用findall或{},而不是{}。在

^{pr2}$

在我看来,你可能需要一些词的界限:

>>> print re.findall(r'\b\w{6}\b',s)
['RECLOC', 'WL9795', 'RHFQCD', '1QZ1JF', 'N3BZW8', '05RXPM', '2XR9ZR', '0Q14S4', 'LRRKW3', '949Z4T', '51WFM2', 'PRGWVT', 'SM0BHS', 'QRJLH1', 'R69NHV', '67XKF7', '68PV7P', 'GCZZ0C', 'MLMS3L', '3R1S49', 'WB700R', '718KRC', 'RTQH2H', 'N2FLM6', '40M1FR', '71D3HF']

此正则表达式匹配正好是字符长度的字母数字模式。换句话说,它不匹配"foobarbaz"中的任何内容,但它将匹配"foobar."中的foobar

相关问题 更多 >