[英]How to extract substring by not including alternate text using 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]+)\.[proximal|distal]
通過給予;
BB_152.HPMSC.distal
BB_147.HMSC-he.proximal
什么是正確的方法?
您可以使用(?=...
(?=...)
如果...
下一個匹配,則匹配,但不使用任何字符串。 這稱為先行斷言。 例如,僅當Isaac (?=Asimov)
后跟'Asimov'
它才會與'Isaac '
匹配。
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
'''
re.findall(r"([^/]*)\.(?=proximal|distal)", s)
產量
['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']
(?=\\.proximal|\\.distal)
-超前肯定斷言,確保關鍵序列后跟.proximal
或.distal
正則表達式應為
.*\/([A-Z\_0-9\.\-a-z]+)\.(?:proximal|distal)
[]
是一個位置的一組字符,必須使用圓括號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.