Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中从字符串中提取数字_Python_Regex - Fatal编程技术网

在python中从字符串中提取数字

在python中从字符串中提取数字,python,regex,Python,Regex,我想从Python中这样的字符串中提取一个数字: string1 = 154787xs.txt 我想从那里得到154787。我用的是: searchPattern = re.compile('\d\d\d\d\d\d(?=xs)') m = searchPattern.search(string1) number = m.group() 但是我没有得到正确的值。而且数字的数量可能会改变 我做错了什么?只需使用以下模式 searchPattern = re.compile(r'\d+(?=xs

我想从Python中这样的字符串中提取一个数字:

string1 = 154787xs.txt
我想从那里得到
154787
。我用的是:

searchPattern = re.compile('\d\d\d\d\d\d(?=xs)')
m = searchPattern.search(string1)
number = m.group()
但是我没有得到正确的值。而且数字的数量可能会改变


我做错了什么?

只需使用以下模式

searchPattern = re.compile(r'\d+(?=xs)')
说明:

>>> import re
>>> searchPattern = re.compile(r'\d+(?=xs)')
>>> m = searchPattern.search(string1)
>>> m
<_sre.SRE_Match object at 0x7f6047f66370>
>>> number = m.group()
>>> number
'154787'
  • \d+
    匹配一个或多个数字
  • (?=xs)
    Lookahead断言数字后面的字符必须是
    xs
代码:

>>> import re
>>> searchPattern = re.compile(r'\d+(?=xs)')
>>> m = searchPattern.search(string1)
>>> m
<_sre.SRE_Match object at 0x7f6047f66370>
>>> number = m.group()
>>> number
'154787'
>>重新导入
>>>searchPattern=re.compile(r'\d+(?=xs'))
>>>m=searchPattern.search(string1)
>>>m
>>>编号=m.组()
>>>数
'154787'

你说你没有得到正确的值是什么意思? 您的代码与字符串
'154787'
匹配成功。 也许您希望
number
成为
int
?在这种情况下,请使用:

number = int(m.group())

顺便说一下,正则表达式可以写成

searchPattern = re.compile('(\d+)xs')
m = searchPattern.search(string1)
if m:
    number = int(m.group(1))
我得到了正确的值<代码>编号==“154787”。你能更清楚地说明你认为的问题是什么吗?此外,您还可以使用指定字符的重复次数,例如
\d{6}
(正好六次)或
\d{4,8}
(介于四到八次之间)。