Py学习  »  Python

python regex以匹配可选的双引号字符串

Durga • 6 年前 • 1420 次点击  

我想使用python regex模块将可选的双引号字符串与正则表达式匹配 重新

表达式应给出以下结果:

"Assets". =>应匹配

Assets. =>应匹配

"Assets. =>不应匹配

Assets". =>不应匹配

我尝试在正则表达式中使用back-reference来实现这一点:

("?)Assets\1 

但是,即使没有匹配的结束引号,它也会匹配。 “资产。 ->忽略首引号“,并匹配单词的其余部分。

这句话的正确表达方式是什么?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38813
 
1420 次点击  
文章 [ 2 ]  |  最新文章 6 年前
Sunitha
Reply   •   1 楼
Sunitha    7 年前

您的regexp模式几乎是正确的。您只需确保在您的模式前后没有引号。所以使用这个模式 r'(?<!")("?)Assets\1(?!")

>>> words = ['"Assets"', 'Assets', '"Assets', 'Assets"']
>>> ptrn = re.compile(r'(?<!")("?)Assets\1(?!")')
>>> [bool(ptrn.match(word)) for word in words]
[True, True, False, False]
schwobaseggl
Reply   •   2 楼
schwobaseggl    7 年前

您可以使用以下模式。请注意,它基本上列出了这两种不同的情况,因为众所周知,括号不是规则的,而是上下文相关的,因此很难用正则表达式处理:

>>> p = re.compile(r'^(?:"[^"]+"|[^"]+)$')
>>> bool(p.match('"assets"'))
True
>>> bool(p.match('"assets'))
False
>>> bool(p.match('assets'))
True

这还假定在匹配的字符串之前或之后没有字符。