正则表达式没有正确识别字符串(Python)

时间:2015-04-09 21:10:25

标签: python regex

我正在使用在线正则表达式调试器Regexr(www.regexr.com),它正在为我正确识别工作和非工作的正则表达式。但是,我坚持使用Regexr认为正常工作的两个特定正则表达式,但他们在我的实现中不会工作。第一个我用来定位PGP密钥,特别是页眉和页脚。我的正则表达是:

[-]{5}[A-Z]{3,5}\sPGP\sMESSAGE[-]{5}[^.]

我用它来识别:

-----BEGIN PGP MESSAGE-----

-----END PGP MESSAGE-----

我在实际执行中不能工作的另一个正则表达式是识别英国护照号码:

\b[0-9]{10}GB[RP][0-9]{7}[UMF]{1}[0-9]{9}\b

在regexr中运行的示例:

7086493126GBR6510204M150224602

1234567890GBP1234567F123456712

有人可以提供一些见解,说明为什么这些不起作用?

2 个答案:

答案 0 :(得分:0)

我总是使用https://regex101.com/来测试我的正则表达式。它准确地解释了你的正则表达式正在做什么,并告诉你你的字符串是否匹配。

尝试一下!

如果您无法确定问题,那么正则表达式可能不是问题。

使用regex101,我认为这可能会更好:^[-]{5}[A-Z]{3,5}\sPGP\sMESSAGE[-]{5}$

如果您阅读[^.]上的说明,则说“匹配下面列表中不存在的单个字符。字面字符.”。

答案 1 :(得分:0)

我认为你的问题是正则表达式的最后一部分:[^.]

这将匹配任何不是文字句号的字符。我不认为这是你的预期用途,它肯定会导致正则表达式本身与开始和结束消息不匹配。

要明确 - 虽然.通常是元字符,但在[]内它只是一个文字字符。

对于GB护照ID,我必须在更多上下文中看到字符串,但问题几乎肯定是单词边界元字符。