我试图从文本文件中提取一个字符串,因为我是正则表达式的新手,因此我被卡住了

时间:2015-04-14 10:29:45

标签: python regex

我正在通过.txt文件搜索字符串。文件包含文字:

Script dchsdpa uplink(Pxi_load_vector("i_and_v.aiq")
                      sim_recharge_bx('d_and_v.aiq')

我要提取的字符串是:

i_and_v.aiq
d_and_v.aiq

仅表示引号内的字符串。

我写了以下代码:

for line in input_file:
    match=re.findall(r"\S*.aiq\S*",line)

我知道\S会匹配任何非空格,但我无法想象 如何摆脱额外的文本,因为我只需要上面指定的字符串。

它给了我输出:

Pxi_load_vector("i_and_v.aiq")

2 个答案:

答案 0 :(得分:1)

阅读整个文件,然后在其上应用re.findall功能。

with open('file') as f:
    print re.findall(r"""(?<=')[^']*\.aiq(?=')|(?<=")[^"]*\.aiq(?=")""", f.read())

示例:

>>> s = '''Script dchsdpa uplink(Pxi_load_vector("i_and_v.aiq")
                      sim_recharge_bx('d_and_v.aiq')'''
>>> re.findall(r"""(?<=')[^']*\.aiq(?=')|(?<=")[^"]*\.aiq(?=")""", s)
['i_and_v.aiq', 'd_and_v.aiq']

>>> [j for i in re.findall(r"""'([^']*\.aiq)'|"([^"]*\.aiq)\"""", s) for j in i if j]
['i_and_v.aiq', 'd_and_v.aiq']

>>> [j for i in re.findall(r"""(['"])((?:(?!\1).)*\.aiq)\1""", s) for j in i if j not in ["'", '"']]
['i_and_v.aiq', 'd_and_v.aiq']

答案 1 :(得分:0)

match=re.findall(r"""[^"']*\.aiq[^"']*""",line)

使用与negation based匹配的[^"']*

参见演示。

https://regex101.com/r/sJ9gM7/100#python