这是我在这个网站上的第一篇帖子,所以如果我搞砸了,告诉我。我需要为同名文件找到配置文件,不同的是配置文件的末尾有str。
some characters + _digit + car + some more characters + str or nothing.
所有文件都是文本形式,因此扩展名不提供任何更多信息。文件名中还包含一些重要的信息,如出现次数,我也需要提取这些信息。你知道吗
我使用regex的方法可以归结为
import re
reg = '(.*(?=\\dcar))(\\d(?=car)).*(str)?'
config_to_file1 = 'wts-lg-000191_0car_lp_str'
file1 = 'wts-lg-000191_0car_lp'
print(re.findall(reg,file1))
print(re.findall(reg,config_to_file1))
我也试过这个
reg = '(.*(?=\\dcar))(\\d(?=car)).*(str)+'
我希望得到这个:
[('wts-lg-000191_', '0', 'str')]
[('wts-lg-000191_', '0', '')]
但我得到了这个:
[('wts-lg-000191_', '0', '')]
[('wts-lg-000191_', '0', '')]
我知道我不使用?我试着四处看看,但不知道我错过了什么。我还想坚持使用正则表达式方法进行练习。你知道吗
regex失败的主要原因是
.*
之前的(str)?
将整个字符串抓取到底,而(str)?
只是匹配字符串结尾的位置,因为它不必使用任何字符(因为它是可选的)。你知道吗但是,由于过度使用lookarounds,regex可以得到极大的优化。使用
或者
参见this Python demo和regex demo。你知道吗
细节
(.*?)
-第1组:除换行符以外的任何0+字符尽可能少(\d+)
-第2组:一个或多个数字car
-一个car
字符串(?:.*(str))?
-一个可选的非捕获组,匹配1次或0次.*
-除换行符以外的任何0+个字符尽可能多(str)
-第3组:str
子串。你知道吗相关问题 更多 >
编程相关推荐