如何提取字符串末尾的非数字字符和数字字符?

How can I extract non digit characters and digit characters in the end of a string?

我有一个具有以下结构的字符串:

位数-字-位数。

例如:

2029 AG.IZTAPALAPA 2

我想提取中间的单词和字符串末尾的数字。

我想提取AG.IZTAPALAPA 2在同一个捕获组中提取像:

AG.IZTAPALAPA 2

我设法将它们捕获为单独的捕获组,但不是单个捕获组:

town_state['municipality'] = town_state['Town'].str.extract(r'(\D+)', expand=False)

town_state['number'] = town_state['Town'].str.extract(r'(\d+)$', expand=False)

感谢您的帮助!

您可以使用以下简单的正则表达式:

[0-9]+\s([A-Z]+.[A-Z]+(?: [0-9]+)*)

注:

(?: [0-9]+)* 将使其成为最后一个可选数字。

你可以为示例字符串使用单个捕获组来匹配由大写字符组成的单个“单词”A-Z,中间有一个可选的点,不能在开头或结尾减少一位或多位数字。

\b\d+ ([A-Z]+(?:\.[A-Z]+)* \d+)\b

说明

  • \b一个单词边界
  • \d+
  • ( 捕获 组 1
    • [A-Z]+ 匹配出现 1 次以上的大写字符 A-Z
    • (?:\.[A-Z]+)* \d+ 重复 0+ 次匹配一个点和一个字符 A-Z 然后匹配 1+ 个数字
  • ) 关闭组 1
  • \b一个单词边界

Regex demo

或者您可以使模式更宽一些,以匹配点或单词字符

\b\d+ ([\w.]+(?: [\w.]+)* \d+)\b

Regex demo