python - 在引号之间匹配字符串时出现问题,但如果行以 % 开头则不会出现问题

标签 python regex python-2.7

我正在尝试重新(编码)已解码的 LC_TIME (区域设置)文件。我想匹配引号之间的所有字符串,但如果它们是注释的一部分,则不匹配,注释行以 % 开头.

r'"([^"]*)"'可以很好地匹配引号之间的所有字符串,但它不会检查它是否是注释的一部分。

澄清一下:

abday   "Sun";"Mon";/
    "Tue";"Wed";/
    "Thu";"Fri";/
    "Sat"

应该会产生七场比赛

d_fmt   "%m/%d/%Y"

应该会产生一场比赛

% Appropriate time representation (%X)
%   "%r"

应该导致匹配

注意: re.findall('^(?!%).*?"([^"]*)"', text, flags=re.M)几乎可以达到目的,但它只匹配 ['Sun', 'Tue', 'Thu', 'Sat']abday示例。

参见this link用于对多种情况进行测试。

最佳答案

使用否定先行断言:

>>> text = '''
a "quoted" element
% "Comment"
"something else"
'''
>>> re.findall('^(?!%).*?"([^"]*)"', text, flags=re.M)
['quoted', 'something else']
>>> re.findall('^(?!%)[^"]*"([^"]*)"', text, flags=re.M)
['quoted', 'something else']

关于python - 在引号之间匹配字符串时出现问题,但如果行以 % 开头则不会出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28584402/

相关文章:

python - 如何使用 Django 安装自定义 SQL

mysql - 正则表达式全部大写并带有特殊字符

python-2.7 - App Engine 本地数据存储区内容不会保留

python - 如何使用 gzip 解压缩从服务器检索的字符串

python - 从顶层访问继承的方法

python - 为什么 is 运算符说两个相等的 id 不相同?

python - 在Python中从另一个类创建一个类对象

python - 根据另外 2 个列表的索引比较 2 个列表,并使用列表理解将索引保存在新列表中

regex - htaccess : redirect if not match

java - 正则表达式:捕获两个单词之间的单词