如何找到由下划线分隔的下一个单词是什么

时间:2015-09-17 11:59:41

标签: python regex

我有一个Python应用程序,可以上传特定文件并找到正确的位置路径。

第一条路径有两种可能: path1 path2

第二条路径有大约4-5种可能性。上传的所有文件都将命名为:

GE_1234_path1_possib1_655_ygiu_qis

为了找到写入的路径,我写了这个if-else语句:

path1 = re.search(r'path1', self.fileList[0])
path2 = re.search(r'path2', self.fileList[0])
        if path1:
            radioButton = 2

        if path2:
            radioButton = 1

我知道我可以对5种可能性应用相同的if else语句。但是我更喜欢阅读 path1 之后的内容。有没有办法让正则表达式在路径后跳过下划线并阅读可能性是什么?

在这个例子中,我正在寻找能输出 possib1

的东西

我试过了:

print re.findall(r'path1\w', self.fileList[0])

但是只打印path1_

3 个答案:

答案 0 :(得分:1)

使用捕获组捕获path1旁边存在的字母数字字符。

print re.findall(r'path1\w([A-Za-z\d]+)', self.fileList[0])

>>> s = 'GE_1234_path1_possib1_655_ygiu_qis'
>>> spl = s.split('_')
>>> for i,j in enumerate(spl):
    if 'path1' in j:
        print(spl[i+1])


possib1
>>> 

答案 1 :(得分:1)

您可以使用以下正则表达式:

print re.findall(r'path1_([^_]+)', self.fileList[0])

([^_]+)是捕获组中的否定字符类,它将匹配_之后除path1_之外的任何内容。

请参阅演示https://regex101.com/r/wM4iI6/1

答案 2 :(得分:1)

您可以使用以下解决方案:

import re
p = re.compile(ur'path\d+_([^_]+)')
test_str = ur"GE_1234_path1_possib1_655_ygiu_qis"
match = p.search(test_str)
if match:
    print match.group(1)

请参阅IDEONE demo

正则表达式 - path\d+_([^_]+) - 匹配path,然后是数字和下划线,然后匹配并捕获第1组除_以外的一个或多个字符。然后,如果找到匹配,我们将访问该组。