我正在尝试使用正则表达式来匹配某个字符,只有当它不与某个字符紧邻时才会匹配。 (对于Caliber的电子书)
具体来说,我希望匹配不在句子末尾的所有”
,这意味着它们将位于常规字符之间,而不是尖括号或空格。我认为”[^<]
会起作用,但它会同时选择引号和下一个字符,而不仅仅是字符本身。我也不确定怎么做OR来检查空间。我假设它会像”[^<]|[^ ]
那样,但那也不对。
以下是我想要匹配的示例:
在尖括号旁边:
<p class="calibre1">“I”m tired!”</p>
在空格旁边:<p class="calibre1">“I”m tired!” he said</p>
只应选择I”m
中的引号(并且只选择引号本身)
我很抱歉,如果有一个明显的答案,但我一直在阅读Python的正则表达式文档,我无法弄清楚。 :(
答案 0 :(得分:4)
你也许可以使用这样的负向前瞻(?! ... )
:
”(?!<)
这将与”
匹配,除非后面跟<
。
添加空间......
”(?![< ])
除非”
或空格后跟<
,否则该匹配{{1}}。
答案 1 :(得分:1)
regex = r '"(?!<|\s)'
|
表示“或”
\s
表示空格
您无需捕获,因为您知道自己只匹配"
。
或者,您可以使用字符类而不是or,即:[<\s]
。