我有一个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_
答案 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_
之外的任何内容。
答案 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组除_
以外的一个或多个字符。然后,如果找到匹配,我们将访问该组。