【问题标题】:regex for state abbreviations (python)州缩写的正则表达式(python)
【发布时间】:2010-02-22 18:13:28
【问题描述】:

我正在尝试使用 python 创建一个与字符串中的美国州缩写匹配的正则表达式。

缩写可以是以下格式:

CA
Ca

字符串可以是:

Boulder, CO 80303
Boulder, Co
Boulder CO
...

这是我所拥有的,显然效果不佳。我对正则表达式不太擅长,谷歌也没有出现太多。

pat = re.compile("[A-Za-z]{2}")
st = pat.search(str)
stateAbb = st.group(0)

【问题讨论】:

    标签: python regex


    【解决方案1】:

    一种简单可靠的方法是列出所有状态:

    states = ['IA', 'KS', 'UT', 'VA', 'NC', 'NE', 'SD', 'AL', 'ID', 'FM', 'DE', 'AK', 'CT', 'PR', 'NM', 'MS', 'PW', 'CO', 'NJ', 'FL', 'MN', 'VI', 'NV', 'AZ', 'WI', 'ND', 'PA', 'OK', 'KY', 'RI', 'NH', 'MO', 'ME', 'VT', 'GA', 'GU', 'AS', 'NY', 'CA', 'HI', 'IL', 'TN', 'MA', 'OH', 'MD', 'MI', 'WY', 'WA', 'OR', 'MH', 'SC', 'IN', 'LA', 'MP', 'DC', 'MT', 'AR', 'WV', 'TX']
    regex = re.compile(r'\b(' + '|'.join(states) + r')\b', re.IGNORECASE)
    

    如果您想要非美国州,请使用另一个州列表。

    【讨论】:

    • 如果该州恰好是印第安纳州,缩写为 IN,并且由于忽略大小写,正则表达式捕获了任何带有单词“in”的内容,会发生什么情况?由于“in”这个词在英语中的使用非常普遍,并且与印第安纳州无关,所以这不会抛弃你正在抓取的任何东西吗?我在几个页面上专门考虑了这个案例,上面写着“登录”
    【解决方案2】:
    re.search(r'\b[a-z]{2}\b', subject, re.I)
    

    它会找到城镇的双字母名称

    【讨论】:

    • 除非有两个字母命名的城市。
    猜你喜欢
    • 2016-01-06
    • 2017-08-11
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    相关资源
    最近更新 更多