我正在尝试从文本文件中提取一个字符串,因为我对正则表达式还不熟悉,所以我很犯愁。

2024-10-03 06:26:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我在.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")

Tags: and文件字符串文本txtlinescriptload
2条回答
match=re.findall(r"""[^"']*\.aiq[^"']*""",line)

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

请参见演示

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

读取整个文件,然后对其应用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']

相关问题 更多 >