匹配返回结果问题
import rep = re.compile(r'\w+省—\w\(\w+\)')
a = '黑龙江省—黑(哈尔滨)、吉林省—吉(长春)、辽宁省—辽(沈阳)、河北省—冀(石家庄)、甘肃省—甘(兰州)、青海省—青(西宁)、陕西省—陕(西安)、河南省—豫(郑州)、山东省—鲁(济南)、山西省—晋(太原)、安徽省—皖(合肥)、湖北省—鄂(武汉)、湖南省—湘(长沙)、江苏省—苏(南京)、四川省—川(成都)、贵州省—黔(贵阳)、云南省—滇(昆明)、浙江省—浙(杭州)、江西省—赣(南昌)、广东省—粤(广州)、福建省—闽(福州)、台湾省—台(台北)、海南省—琼(海口)'
mo = p.findall(a)
print(mo)
我这个正则表达式就是要匹配省份-省会,但是结果却是空列表。
是哪里出问题了?哪位前辈帮忙看一下吧 1)re.compile(r'\w+省—\w(\w+)'),里面是中文括号。
2)a用3对那种引号,a="""xxxxx"""
我一般会复制需要匹配的字符串,如你这里的 黑龙江省—黑(哈尔滨),
然后用英文括号括住 需要匹配查找的部分:(黑龙江)省—黑((哈尔滨))——英文括号括住的且能匹配的,最后会放到group里。
—— 然后再用“通配符”,就变成了: (\w+)省—黑((\w+))写成正则就是:re.findall(r"(\w+)省—黑((\w+)*)", a) 这样你至少匹配出来了一个。。
—— 再然后,匹配次数(贪婪模式/非贪婪模式)和忽略(通配哪些不需要):
re.findall(r"(\w+)*省—.?((\w+)*)", a)
注意:正则本质上是一个个字符来检查匹配的。
import re
a = """黑龙江省—黑(哈尔滨)、吉林省—吉(长春)、辽宁省—辽(沈阳)、河北省—冀(石家庄)、甘肃省—甘(兰州)、青海省—青(西宁)、陕西省—陕(西安)、河南省—豫(郑州)、山东省—鲁(济南)、山西省—晋(太原)、安徽省—皖(合肥)、湖北省—鄂(武汉)、湖南省—湘(长沙)、江苏省—苏(南京)、四川省—川(成都)、贵州省—黔(贵阳)、云南省—滇(昆明)、浙江省—浙(杭州)、江西省—赣(南昌)、广东省—粤(广州)、福建省—闽(福州)、台湾省—台(台北)、海南省—琼(海口)"""
mo = re.findall(r"([\u4e00-\u9fa5]+)省—\w?(([\u4e00-\u9fa5]+)*)",a)
print(mo)
阿奇_o 发表于 2021-7-2 18:12
我一般会复制需要匹配的字符串,如你这里的 黑龙江省—黑(哈尔滨),
然后用英文括号括住 需要匹配查找的 ...
谢谢,但是我按照你这匹配,却没有匹配到,只有省份,没有了省会了 suchocolate 发表于 2021-7-2 17:09
1)re.compile(r'\w+省—\w(\w+)'),里面是中文括号。
2)a用3对那种引号,a="""xxxxx"""
谢谢啊,但是你这匹配到的还是原来的字符,一点没变啊 basketmn 发表于 2021-7-2 19:58
谢谢,你的匹配我试过了,只能匹配省份,省会没有匹配到 谢谢,综合楼上前辈们的解答,我已经找到解决的办法了。
(\w+省)—\w((\w+))
有一点需要解释一下,就是第二个分组的外层括号是中文的,内层括号是英文的,还有一点就是中间的短横也是中文的。
这样就能得到:('黑龙江省', '哈尔滨'),这种类型的答案了。 阿奇_o 发表于 2021-7-2 18:12
我一般会复制需要匹配的字符串,如你这里的 黑龙江省—黑(哈尔滨),
然后用英文括号括住 需要匹配查找的 ...
不好意思啊,是我理解错了,没看明白你写的。现在明白了,你的写法和想法都是对的。
页:
[1]