在文本python的右边提取一个数字

时间:2018-12-25 09:46:40

标签: python

假设我在python中有一些以某些数字结尾的字符串。

2te2xt12
text1
text143
te2xt341

如何获得最正确的数字序列:

2te2xt12  >>  12
text1     >>  1
text143   >>  143
te2xt341  >>  341

有没有简单易行的方法。

我对re一无所知

预先感谢

4 个答案:

答案 0 :(得分:4)

import re
s=r"""1231ololo767980716"""
re.match('.*?([0-9]+)$', s).group(1)

>>> '767980716'

next(re.finditer(r'\d+$', s)).group(0)
>>> '767980716'

正则表达式组件的说明:

  • .*?是非贪婪的匹配项,它仅消耗尽可能多的(a 贪婪的匹配会消耗掉除最后一位以外的所有内容。

  • [0-9]\d是捕获数字的两种不同方式。请注意,后者也与其他书写方式中的数字匹配,例如

  • 括号(())使表达式的内容成为一个组,可以使用group(1)(或对于第二组为2,对于整个匹配为0)进行检索。
  • +表示多个条目(末尾至少一个数字)。
  • $仅匹配输入的结尾。

以及您可以在此处找到的所有组件:https://www.rexegg.com/regex-quickstart.html非常有用的备忘单

答案 1 :(得分:1)

尝试一下?功能测试应该可以满足您的需求。

import re

def test(string):
    m = re.search(r'\d+$', string)
    if m is not None:
        print(m.group())

答案 2 :(得分:1)

使用正则表达式File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 3088, in <module> @_call_aside File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 3072, in _call_aside f(*args, **kwargs) File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 3101, in _initialize_master_working_set working_set = WorkingSet._build_master() File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 574, in _build_master ws.require(__requires__) File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 892, in require needed = self.resolve(parse_requirements(requirements)) File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 778, in resolve raise DistributionNotFound(req, requirers) pkg_resources.DistributionNotFound: The 'awsebcli==3.12.1' distribution was not found and is required by the application 的这段代码应该可以为您提供真正想要的东西,

\d+$

打印

import re

arr = ['2te2xt12',
'text1',
'text143',
'te2xt341']

for s in arr:
 m = re.search(r'\d+$', s)
 if (m):
  print(s + ' >> ' + m.group())

答案 3 :(得分:0)

在python中使用正则表达式非常简单

re.findall('\d+$',yourString)[0]

要了解有关正则表达式的更多信息,请参阅文档here