gpt4 book ai didi

python - 从通过正则表达式检索的起点选择字符串中的项目(Python)

转载 作者:太空宇宙 更新时间:2023-11-03 18:36:45 25 4
gpt4 key购买 nike

所以,我的情况是这样的:我有一个包含各种元素的字符串列表(半百万,或多或少),例如 AJIAJAJKAJKAHAKAKG 或 AOKANSDBSDFBJJ (举个例子)。

我的目标是创建一个脚本来标识每个字符串,该字符串携带用户定义的元素数组(例如“JIAJA”),然后从最后一个匹配的元素开始,仅获取其后的 N 个元素并将它们附加到先前设置的新列表(继续该示例,假设脚本在第一个字符串中找到了模式,然后将 N 设置为 5,检索“JKAJK”并将其附加到新列表中)。

'到目前为止,我只能选择那些与模式条件匹配的字符串,但我仍然无法检索该模式之后的 N 元素。

到目前为止的代码是这样的:

l = open(file, "r").readlines()
s = [item.rstrip('\n') for item in l]
pattern = input("Insert pattern ")
if len(pattern) >=4:
for i in range(len(s)):
motif = re.compile('%s' % pattern)
if re.search(motif, s[i]):
selection.append(s[i])
else:
continue

我该如何处理下一步?

最佳答案

您可以使用match.end :

line = s[i]
match = re.search(motif, line)
if match:
selection.append(line[match.end():match.end()+5])
<小时/>

使用re.search将允许用户输入正则表达式模式。但是,如果模式只是文字字符,那么

line = s[i]
idx = line.find(pattern)
if idx >= 0:
end = idx+len(pattern)
selection.append(line[end:end+5])

会更快。

<小时/>

不需要编译模式

motif = re.compile('%s' % pattern)

for循环内(即每行一次)。自从re 模块缓存已编译的正则表达式模式,您可以使用

match = re.search(pattern, line)

直接。

<小时/>

此外,将整个文件读入行列表也是内存效率低下的:

open(file, "r").readlines()
s = [item.rstrip('\n') for item in l]

由于您每次只对每一行进行操作,因此可以改用此模式:

with open(file, "r") as f:
for line in f:
line = line.rstrip()

作者:using a with-statement ,当执行离开 with-suite 时,Python 将为您关闭 f

<小时/>

因此,您的代码可以像这样重新排列:

pattern = input("Insert pattern ")
if len(pattern) < 4:
sys.exit('pattern too short')

with open(file, "r") as f:
for line in f:
line = line.strip()
match = re.search(pattern, line)
if match:
selection.append(line[match.end():match.end()+5])

关于python - 从通过正则表达式检索的起点选择字符串中的项目(Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21433708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com