【问题标题】:Can't extract the numbers from the last bracket of each line using regex [duplicate]无法使用正则表达式从每行的最后一个括号中提取数字[重复]
【发布时间】:2020-04-17 10:44:54
【问题描述】:

我正在尝试获取文本块中每行最后一个括号内的数字。但是,我目前的方法只获取最后一个括号的数字。

我试过了(数字可以是任何数字):

import re

items = """
PTT KBALTHNAL (07) PETROL STATION (500003985)
ZHONGGUO (035) SHAXIAN 01 (5001039)
AHARATHAN BAIJIAING (0837) SU YOUMING (500086)
"""
ids = re.findall(r"\((\d+)\)$",items)
print(ids)

我得到的输出:

['500086']

我追求的输出:

['500003985','5001039','500086']

如何从每行的最后一个括号中提取数字?

【问题讨论】:

  • re.findall(r"\((\d+)\)$",items, re.M)。或者不要使用re.M而使用(?:$|\n)
  • re.findall(r"\((\d+)\)\n",items)
  • 不需要接受错误的答案,它只会伤害SO。

标签: python regex python-3.x python-re


【解决方案1】:

让我们只包含字符串的最后一个括号:

items = 'PTT KBALTHNAL (07) PETROL STATION (500003985)\nZHONGGUO (035) SHAXIAN 01 (5001039)\nAHARATHAN BAIJIAING (0837) SU YOUMING (500086)'

这里(?!.) 排除了换行符之后的每一个出现:

re.findall('\((\d+)\)(?!.)',items)

在这里,我们找到带括号的数字,以换行符结尾。
这给了你:

['500003985', '5001039', '500086']

【讨论】:

  • r"\((\d+)\)\n" 是错误的,因为您永远不会在最后一行找到匹配项。不理解的不要转发别人的错误解决方案。
  • 它给出了解决方案。我测试了
  • 所以,您甚至没有正确测试它。你得到2 values,而不是3。
  • 我得到了 3 个值。
  • 是的,因为你没有测试它是否在字符串的末尾匹配。
猜你喜欢
  • 2017-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多