如何使用Python正则表达式通过不包含替换文本来提取子字符串
我有以下两个字符串:如何使用Python正则表达式通过不包含替换文本来提取子字符串,python,regex,Python,Regex,我有以下两个字符串: various_data/hmsc_proximal_distal/BB_152.HPMSC.distal.tss_ext500bp.narrowPeak various_data/hmsc_proximal_distal/BB_147.HMSC-he.proximal.tss_ext500bp.narrowPeak 我想做的是捕捉: BB_152.HPMSC BB_147.HMSC-he 此正则表达式失败的原因: .*\/([A-Z\_0-9\.\-a-z]+)\.[
various_data/hmsc_proximal_distal/BB_152.HPMSC.distal.tss_ext500bp.narrowPeak
various_data/hmsc_proximal_distal/BB_147.HMSC-he.proximal.tss_ext500bp.narrowPeak
我想做的是捕捉:
BB_152.HPMSC
BB_147.HMSC-he
此正则表达式失败的原因:
.*\/([A-Z\_0-9\.\-a-z]+)\.[proximal|distal]
通过给予
BB_152.HPMSC.distal
BB_147.HMSC-he.proximal
正确的方法是什么?使用
re.findall()
函数的解决方案:
import re
s = '''
various_data/hmsc_proximal_distal/BB_152.HPMSC.distal.tss_ext500bp.narrowPeak
various_data/hmsc_proximal_distal/BB_147.HMSC-he.proximal.tss_ext500bp.narrowPeak
'''
result = re.findall(r'[A-Z]{2}_\d+\.[a-zA-Z-]+(?=\.proximal|\.distal)', s)
print(result)
输出:
['BB_152.HPMSC', 'BB_147.HMSC-he']
['BB_152.HPMSC', 'BB_147.HMSC-he']
-前瞻性肯定断言,确保关键序列后面紧跟着(?=\.近端\.远端)
或.近端
.远端
re.findall()
函数的解决方案:
import re
s = '''
various_data/hmsc_proximal_distal/BB_152.HPMSC.distal.tss_ext500bp.narrowPeak
various_data/hmsc_proximal_distal/BB_147.HMSC-he.proximal.tss_ext500bp.narrowPeak
'''
result = re.findall(r'[A-Z]{2}_\d+\.[a-zA-Z-]+(?=\.proximal|\.distal)', s)
print(result)
输出:
['BB_152.HPMSC', 'BB_147.HMSC-he']
['BB_152.HPMSC', 'BB_147.HMSC-he']
-前瞻性肯定断言,确保关键序列后面紧跟着(?=\.近端\.远端)
或.近端
.远端
- 正则表达式应该是
.*\/([A-Z\_0-9\.\-a-z]+)\.(?:proximal|distal)
[]
是一个位置的一组字符,必须使用圆括号。正则表达式应该是
.*\/([A-Z\_0-9\.\-a-z]+)\.(?:proximal|distal)
[]
是一组用于一个位置的字符,您必须使用圆括号。您可以使用(?=…
组成一个前瞻组
(?=…)
如果
…
匹配下一个,则匹配,但不使用任何
字符串。这称为前瞻断言。例如,Isaac(?=Asimov)
仅当后跟'Asimov'
时才会匹配'Isaac'
屈服
您可以使用(?=…
组成一个前瞻组
(?=…)
如果
…
匹配下一个,则匹配,但不使用任何
字符串。这称为前瞻断言。例如,Isaac(?=Asimov)
仅当后跟'Asimov'
时才会匹配'Isaac'
屈服