首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用python中的正则表达式区分两个字符串

问用python中的正则表达式区分两个字符串
EN

Stack Overflow用户
提问于 2017-01-24 06:25:14
回答 2查看 96关注 0票数 0
代码语言:javascript
复制
mato_grosso_2000_test.csv
mato_grosso_do_sul_2000_test.csv

我想在python中构建一个正则表达式,它可以区分上面的两行。_20xx_test.csv总是出现在文件名中,xx可以从00到17不等,我该怎么做呢?

我尝试了一个简单的as匹配,但这不能区分两者,即mato_grosso也找到了mato_grosso_do_sul

编辑:

我希望reg测试选择mato_grosso_2000_test.csv和mato_grosso_2001_test.csv,而不是mato_grosso_do_sul_2000_test.csv

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-24 06:34:45

我认为你真正想要的是这样的东西:

代码语言:javascript
复制
regions_to_files = defaultdict(list)
for x in filenames:
    matches = re.match(r'(?P<region>.*)_(?P<year>200[0-9]|201[0-7])_test.csv', x)
    region = matches.group('region')
    regions_to_files[region].append(x)

现在,与mato_grosso相关的所有文件将在regions_to_files['mato_grosso']上可用,而与mato_grosso_do_sul相关的所有文件将在regions_to_files['mato_grosso_do_sul']上可用。

匹配第一个文件名:

代码语言:javascript
复制
# mato_grosso_2000_test.csv
re.match(r'mato_grosso_20(0[0-9]|1[0-7])_test.csv', filename)

匹配第二个文件名,但不匹配第一个文件名:

代码语言:javascript
复制
# mato_grosso_do_sul_2000_test.csv
re.match(r'mato_grosso_do_sul_20(0[0-9]|1[0-7])_test.csv', filename)

正则表达式(0[0-9]|1[0-7])将匹配00,01,。。。是给你的。

票数 0
EN

Stack Overflow用户

发布于 2017-01-24 06:34:10

可以使用带有负前瞻性断言的regex查找"mato_grosso“的匹配项,而不是"do_sul”。例如:

代码语言:javascript
复制
re.match('mato_grosso_(?!do_sul)', 'mato_grosso_2000_test.csv')

re.match('mato_grosso_(?!do_sul)', 'mato_grosso_do_sul_2000_test.csv')

这将为第一个示例找到匹配,但对于第二个示例却找不到匹配。

Python文档有更多关于正则表达式语法的讨论。要获得更多有关这方面的详细信息,请查找“负面展望”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41821397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档