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

Regex 如何提取字符串末尾的非数字字符和数字字符?,regex,regex-group,Regex,Regex Group,我有一个具有以下结构的字符串: 数字字-数字 例如: 2029年股份公司IZTAPALAPA 2 我想在中间提取单词,在字符串结尾提取数字。< /P> 我想在同一个捕获组中提取AG.IZTAPALAPA和2以提取如下内容: IZTAPALAPA公司2 我设法将它们作为单个捕获组捕获,但不是作为单个捕获组捕获: town_state['municipality'] = town_state['Town'].str.extract(r'(\D+)', expand=False) town_stat

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

数字字-数字

例如:

2029年股份公司IZTAPALAPA 2

我想在中间提取单词,在字符串结尾提取数字。< /P> 我想在同一个捕获组中提取AG.IZTAPALAPA2以提取如下内容:

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] +)*<强>将成为最后的数字可选。/P>> P>Yo可以使用示例字符串的单个捕获组来匹配由大写字符AZ组成的单个“单词”,中间有一个可选的点,不能在起始或结束后面跟着1个或更多个数字。

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

  • \b
    单词边界
  • \d+
  • Capturegroup 1
    • [A-Z]+
      匹配1+个大写字符A-Z
    • (?:\.[A-Z]+)*\d+
      重复0+次匹配点和字符A-Z,然后匹配1+个数字
  • 关闭第1组
  • \b
    单词边界

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

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

虽然我不知道它是哪种语言,但它不是通过
'(\D+\D+$”
完成了预期的工作吗?但是,这两种解决方案都可以工作,我有以下字符串:1。2029年IZTAPALAPA公司。2029 AG.IZTAPALAPA您的答案成功地提取了字符串1,但数字不在末尾。它将字符串“提取”为Nan。有没有办法让最后的数字成为可选的?@AlejandroL你可以让空格和数字部分成为可选的
\b\d+([a-Z]+(?:\.[a-Z]+)*(?:\d+)\b
谢谢,这对在一行代码中将它们作为单独的组捕获很有用。然而,我想把他们作为一个整体来抓。