我正在尝试从Python中的字符串中提取子字符串。 要修剪的前端是静态的,易于实现,但后端有一个计数器,可以从“\u 0”运行到“\u 9999”。你知道吗
在我当前的代码中,计数器仍然包含在子字符串中。你知道吗
import re
text = "fastq_runid_0dc971f49c42ffb1412caee485f8421a1f9a26ed_0.fastq"
print(text)
substring= re.search('runid_(.*)_*.fas', text).group(0)
print(substring)
退货
0dc971f49c42ffb1412caee485f8421a1f9a26ed_0.fas
或者
substring= re.search(r"(?<=runid_).*?(?=_*.fastq)", text).group(0)
退货
0dc971f49c42ffb1412caee485f8421a1f9a26ed_0
效果更好,但仍添加了计数器“\u 0”。你知道吗
我如何做一个强大的修剪修剪多字符计数器?你知道吗
你不需要向后看,向前看就可以实现这个目标。你知道吗
\d{1,4}
表示min 1
max 4
位,否则不匹配https://regex101.com/r/VneElM/1
group(1)
将给出您想要的,group(2)
将给出计数器。你知道吗在regex
(?<=runid_).*?(?=_*.fastq)
中有一个小问题。你已经写了_*
,这意味着零个或更多的下划线,这将使下划线成为可选的,并将跳过匹配,你的.*?
也将在它里面吃_0
,这就是为什么在你的结果中你也得到_0
。我想你的意思是_.*
,而且你应该在fastq
之前避开.
,所以你的更新正则表达式应该是这样的Demo
更新的python代码
指纹
另外,您也可以使用一个简单的正则表达式而不使用lookarounds,并使用这个正则表达式从第一个组捕获文本
Demo
python代码中的文本从
group(1)
而不是group(0)
中选取在这种情况下也会打印出来
相关问题 更多 >
编程相关推荐