正则表达式模式匹配不被特定字符包围的字符

时间:2013-12-18 13:28:54

标签: python regex calibre

我正在尝试使用正则表达式来匹配某个字符,只有当它不与某个字符紧邻时才会匹配。 (对于Caliber的电子书)

具体来说,我希望匹配不在句子末尾的所有,这意味着它们将位于常规字符之间,而不是尖括号或空格。我认为”[^<]会起作用,但它会同时选择引号和下一个字符,而不仅仅是字符本身。我也不确定怎么做OR来检查空间。我假设它会像”[^<]|[^ ]那样,但那也不对。

以下是我想要匹配的示例:

在尖括号旁边: <p class="calibre1">“I”m tired!”</p>

在空格旁边:<p class="calibre1">“I”m tired!” he said</p>

只应选择I”m中的引号(并且只选择引号本身)

我很抱歉,如果有一个明显的答案,但我一直在阅读Python的正则表达式文档,我无法弄清楚。 :(

2 个答案:

答案 0 :(得分:4)

你也许可以使用这样的负向前瞻(?! ... )

”(?!<)

这将与匹配,除非后面跟<

添加空间......

”(?![< ])

除非或空格后跟<,否则该匹配{{1}}。

答案 1 :(得分:1)

使用negative-lookahead

regex = r '"(?!<|\s)'

|表示“或” \s表示空格

您无需捕获,因为您知道自己只匹配"

或者,您可以使用字符类而不是or,即:[<\s]