V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
usnake
V2EX  ›  Python

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

  •  
  •   usnake · 2022-08-13 11:56:36 +08:00 · 2433 次点击
    这是一个创建于 870 天前的主题,其中的信息可能已经有所发展或是发生改变。
    str = '''
    河北省石家庄市    河北省唐山市 河北省秦皇岛市
    
    内蒙呼和浩特市    内蒙包头市  内蒙乌海市
    内蒙赤峰市  内蒙通辽市
    
    广西南宁市  广西柳州市  广西桂林市
    广西梧州市  
    
    重庆市江津市 重庆市合川市 重庆市永川市 重庆市南川市
    
    新疆吐鲁番市 新疆哈密市  新疆昌吉市  新疆阜康市
    新疆米泉市  新疆博乐市  新疆库尔勒市 新疆阿克苏市
    '''
    
    pattern = re.compile(r'(?<=新疆|.省|重庆市|广西).*?市')
    list1 = pattern.findall(str)
    

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

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

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

    如果我很确定这个正则通吃楼主需求,我就去掉『?』
    krixaar
        10
    krixaar  
       2022-08-15 08:37:27 +08:00
    @usnake #1 不把正则改成庆市,把字符串的重庆市 replace 成重庆就行了🤣
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   996 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 21:46 · PVG 05:46 · LAX 13:46 · JFK 16:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.