Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python正则表达式通过不包含替换文本来提取子字符串_Python_Regex - Fatal编程技术网

如何使用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'

      屈服