Python和Regex - 从字符串中提取数字

时间:2011-09-21 22:33:23

标签: python regex

我是正则表达式的新手,我开始有点兴奋。我有一个看起来像这样的字符串:

  

这是生成的数字#123,它是一个整数。

我在123周围显示的文字将始终保持完全相同,但两侧可能还有其他文字。但数字可能是123,597392,实际上是一个或多个数字。我相信我可以使用\d+(?= which is an integer.)来匹配数字和下面的文本,但是如何编写后视部分呢?

当我尝试(?<=This is a generated number #)\d+(?= which is an integer.)时,使用regexpal.com作为测试人员并不匹配。

另外,我如何使用python将其转换为变量(存储为int)?

注意:我想找到夹在我显示的文字之间的数字。字符串可能会更长,有更多的数字。

4 个答案:

答案 0 :(得分:1)

你真的不需要花哨的正则表达式。只需使用你想要的组。

re.search(r'#(\d+)', 'This is a generated number #123 which is an integer.').group(1)

如果要匹配某些已知文本中间的数字,请遵循相同的规则:

r'some text you know (\d+) other text you also know'

答案 1 :(得分:0)

res = re.search('#(\d+)', 'This is a generated number #123 which is an integer.')

if res is not None:
    integer = int(res.group(1))

答案 2 :(得分:0)

如果你想只在数字跟随文本“这是一个生成的数字#”并且后面跟着“这是一个整数”时才能获得数字,你不需要做后视和前瞻。您可以简单地匹配整个字符串,例如:

"This is a generated number #(\d+) which is an integer."

我不确定我是否理解你真正想要的东西。 :)

<强>更新

In [16]: a='This is a generated number #123 which is an integer.'                                                                        

In [17]: b='This should be a generated number #123 which could be an integer.'

In [18]: exp="This is a generated number #(\d+) which is an integer."

In [19]: result =re.search(exp, a)                                                                                                       

In [20]: int(result.group(1))
Out[20]: 123

In [21]: result = re.search(exp,b)

In [22]: result == None
Out[22]: True

答案 3 :(得分:0)

您可以在re模块中使用findall()。

string="This is a string that contains #134534 and other things"
match=re.findall(r'#\d+ .+',string);
print match

输出将是'#1234534和其他东西'

这将匹配任何长度编号#123或#123235345然后是一个空格,然后是该行的其余部分,直到它到达换行符。