我是正则表达式的新手,我开始有点兴奋。我有一个看起来像这样的字符串:
这是生成的数字#123,它是一个整数。
我在123周围显示的文字将始终保持完全相同,但两侧可能还有其他文字。但数字可能是123,597392,实际上是一个或多个数字。我相信我可以使用\d+(?= which is an integer.)
来匹配数字和下面的文本,但是如何编写后视部分呢?
当我尝试(?<=This is a generated number #)\d+(?= which is an integer.)
时,使用regexpal.com作为测试人员并不匹配。
另外,我如何使用python将其转换为变量(存储为int)?
注意:我只想找到夹在我显示的文字之间的数字。字符串可能会更长,有更多的数字。
答案 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然后是一个空格,然后是该行的其余部分,直到它到达换行符。