鱼C论坛

 找回密码
 立即注册
查看: 1625|回复: 8

[已解决]匹配返回结果问题

[复制链接]
发表于 2021-7-2 16:40:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import re

p = re.compile(r'\w+省—\w\(\w+\)')
a = '黑龙江省—黑(哈尔滨)、吉林省—吉(长春)、辽宁省—辽(沈阳)、河北省—冀(石家庄)、甘肃省—甘(兰州)、青海省—青(西宁)、陕西省—陕(西安)、河南省—豫(郑州)、山东省—鲁(济南)、山西省—晋(太原)、安徽省—皖(合肥)、湖北省—鄂(武汉)、湖南省—湘(长沙)、江苏省—苏(南京)、四川省—川(成都)、贵州省—黔(贵阳)、云南省—滇(昆明)、浙江省—浙(杭州)、江西省—赣(南昌)、广东省—粤(广州)、福建省—闽(福州)、台湾省—台(台北)、海南省—琼(海口)'
mo = p.findall(a)
print(mo)

我这个正则表达式就是要匹配省份-省会,但是结果却是空列表。
是哪里出问题了?哪位前辈帮忙看一下吧
最佳答案
2021-7-2 18:12:48
我一般会复制需要匹配的字符串,如你这里的 黑龙江省—黑(哈尔滨),
然后用英文括号括住 需要匹配查找的部分:(黑龙江)省—黑((哈尔滨))——英文括号括住的且能匹配的,最后会放到group里。
—— 然后再用“通配符”,就变成了: (\w+)省—黑((\w+))  写成正则就是:re.findall(r"(\w+)省—黑((\w+)*)", a) 这样你至少匹配出来了一个。。
—— 再然后,匹配次数(贪婪模式/非贪婪模式)和忽略(通配哪些不需要):
re.findall(r"(\w+)*省—.?((\w+)*)", a)



注意:正则本质上是一个个字符来检查匹配的。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-2 17:09:52 | 显示全部楼层
1)re.compile(r'\w+省—\w(\w+)'),里面是中文括号。
2)a用3对那种引号,a="""xxxxx"""
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-2 18:12:48 | 显示全部楼层    本楼为最佳答案   
我一般会复制需要匹配的字符串,如你这里的 黑龙江省—黑(哈尔滨),
然后用英文括号括住 需要匹配查找的部分:(黑龙江)省—黑((哈尔滨))——英文括号括住的且能匹配的,最后会放到group里。
—— 然后再用“通配符”,就变成了: (\w+)省—黑((\w+))  写成正则就是:re.findall(r"(\w+)省—黑((\w+)*)", a) 这样你至少匹配出来了一个。。
—— 再然后,匹配次数(贪婪模式/非贪婪模式)和忽略(通配哪些不需要):
re.findall(r"(\w+)*省—.?((\w+)*)", a)



注意:正则本质上是一个个字符来检查匹配的。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-2 19:58:02 | 显示全部楼层
import re


a = """黑龙江省—黑(哈尔滨)、吉林省—吉(长春)、辽宁省—辽(沈阳)、河北省—冀(石家庄)、甘肃省—甘(兰州)、青海省—青(西宁)、陕西省—陕(西安)、河南省—豫(郑州)、山东省—鲁(济南)、山西省—晋(太原)、安徽省—皖(合肥)、湖北省—鄂(武汉)、湖南省—湘(长沙)、江苏省—苏(南京)、四川省—川(成都)、贵州省—黔(贵阳)、云南省—滇(昆明)、浙江省—浙(杭州)、江西省—赣(南昌)、广东省—粤(广州)、福建省—闽(福州)、台湾省—台(台北)、海南省—琼(海口)"""
mo = re.findall(r"([\u4e00-\u9fa5]+)省—\w?(([\u4e00-\u9fa5]+)*)",a)
print(mo)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-3 10:34:46 | 显示全部楼层
阿奇_o 发表于 2021-7-2 18:12
我一般会复制需要匹配的字符串,如你这里的 黑龙江省—黑(哈尔滨),
然后用英文括号括住 需要匹配查找的 ...

谢谢,但是我按照你这匹配,却没有匹配到,只有省份,没有了省会了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-3 10:58:24 | 显示全部楼层
suchocolate 发表于 2021-7-2 17:09
1)re.compile(r'\w+省—\w(\w+)'),里面是中文括号。
2)a用3对那种引号,a="""xxxxx"""

谢谢啊,但是你这匹配到的还是原来的字符,一点没变啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-3 11:01:39 | 显示全部楼层

谢谢,你的匹配我试过了,只能匹配省份,省会没有匹配到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-3 11:10:57 | 显示全部楼层
谢谢,综合楼上前辈们的解答,我已经找到解决的办法了。
(\w+省)—\w((\w+))
有一点需要解释一下,就是第二个分组的外层括号是中文的,内层括号是英文的,还有一点就是中间的短横也是中文的。
这样就能得到:('黑龙江省', '哈尔滨'),这种类型的答案了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-3 11:15:05 | 显示全部楼层
阿奇_o 发表于 2021-7-2 18:12
我一般会复制需要匹配的字符串,如你这里的 黑龙江省—黑(哈尔滨),
然后用英文括号括住 需要匹配查找的 ...

不好意思啊,是我理解错了,没看明白你写的。现在明白了,你的写法和想法都是对的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 18:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表