请问一下 Python 正则表达式的替代项问题

2022-08-13 11:56:36 +08:00
 usnake
str = '''
河北省石家庄市    河北省唐山市 河北省秦皇岛市

内蒙呼和浩特市    内蒙包头市  内蒙乌海市
内蒙赤峰市  内蒙通辽市

广西南宁市  广西柳州市  广西桂林市
广西梧州市  

重庆市江津市 重庆市合川市 重庆市永川市 重庆市南川市

新疆吐鲁番市 新疆哈密市  新疆昌吉市  新疆阜康市
新疆米泉市  新疆博乐市  新疆库尔勒市 新疆阿克苏市
'''

pattern = re.compile(r'(?<=新疆|.省|重庆市|广西).*?市')
list1 = pattern.findall(str)

我想提取所有的市名,但是这个正则表达式一直提醒我替代项需要同宽度,大家是怎么解决这个问题的呢?

2167 次点击
所在节点    Python
10 条回复
usnake
2022-08-13 11:57:56 +08:00
不要说把重庆市改成庆市啊,会有其它问题的,比如前面一项是大庆市 之类的
dbsquirrel
2022-08-13 12:10:10 +08:00
pattern = re.compile(r"(?:(?<=新疆|内蒙|.省|广西)|(?<=重庆市)).*?市")

source: https://stackoverflow.com/questions/8194470/python-regex-with-look-behind-and-alternatives
wxf666
2022-08-13 12:13:35 +08:00
『(?:新疆|.省|重庆市|广西)(.*?)市』?
usnake
2022-08-13 12:25:21 +08:00
@dbsquirrel 感谢
pantsu
2022-08-13 15:40:52 +08:00
3 楼的写法才是最优解,别用逆序环视
HankLu
2022-08-13 16:12:14 +08:00
当你有一个问题需要用正则去解决,你就有了两个问题
brucmao
2022-08-13 17:04:53 +08:00
@wxf666 看不懂怎么还有中文问号,还有『 符号是干嘛的?
learningman
2022-08-13 19:36:53 +08:00
@brucmao #7 『』里面装的才是表达式
wxf666
2022-08-13 20:11:48 +08:00
@brucmao 哪天 v 站 支持在回复里使用 Markdown 了,我就把『』去掉,换成``

如果我很确定这个正则通吃楼主需求,我就去掉『?』
krixaar
2022-08-15 08:37:27 +08:00
@usnake #1 不把正则改成庆市,把字符串的重庆市 replace 成重庆就行了🤣

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/872591

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX