Uma*_*air 26 python string python-3.x
我是新手Python
,我有一个字符串,我想从字符串中提取数字.例如:
str1 = "3158 reviews"
print (re.findall('\d+', str1 ))
Run Code Online (Sandbox Code Playgroud)
输出是 ['4', '3']
我想3158
只获得一个Integer,而不是List.
Vis*_*yay 81
您可以使用方法filter
按数字字符串str.isdigit
,
>>> int(filter(str.isdigit, str1))
3158
Run Code Online (Sandbox Code Playgroud)
Irs*_*hat 29
这段代码工作正常.肯定存在一些其他问题:
>>> str1 = "3158 reviews"
>>> print (re.findall('\d+', str1 ))
['3158']
Run Code Online (Sandbox Code Playgroud)
你的正则表达式看起来正确.你确定你的变量名没有错吗?在上面的代码中,你混合total_hotel_reviews_string
和str
.
>>> import re
>>> s = "3158 reviews"
>>> print re.findall("\d+", s)
['3158']
Run Code Online (Sandbox Code Playgroud)
你已经非常接近最终答案了。您的re.finadall
表达式仅缺少括号来捕获所有检测到的数字:
re.findall( '(\d+)', str1 )
对于像 之类的更通用的字符串str1 = "3158 reviews, 432 users"
,此代码将产生:
输出:['3158','432']
现在要获取整数,您可以使用将字符串转换为整数的函数map
:int
A = list(map(int,re.findall('(\d+)',str1)))
或者,您可以使用这个单行循环:
A = [ int(x) for x in re.findall('(\d+)',str1) ]
两种方法同样正确。他们屈服了A = [3158, 432]
。
原始问题的最终结果result
将是数组中的第一个条目A
,因此我们得到以下任何表达式:
结果 = list(map(int,re.findall( '(\d+)' , str1 )))[0]
结果 = int(re.findall( '(\d+)' , str1 )[0])
即使 中只有一个数字str1
,re.findall
仍然会返回一个列表,因此您需要A[0]
手动检索第一个元素。
要从字符串中提取单个数字,您可以使用re.search()
,它返回第一个匹配项(或None
):
>>> import re
>>> string = '3158 reviews'
>>> int(re.search(r'\d+', string).group(0))
3158
Run Code Online (Sandbox Code Playgroud)
在 Python 3.6+ 中,您还可以索引匹配对象而不是使用group()
:
>>> int(re.search(r'\d+', string)[0])
3158
Run Code Online (Sandbox Code Playgroud)
Python 2.7:
>>> str1 = "3158 reviews"
>>> int(filter(str.isdigit, str1))
3158
Run Code Online (Sandbox Code Playgroud)
Python 3:
>>> str1 = "3158 reviews"
>>> int(''.join(filter(str.isdigit, str1)))
3158
Run Code Online (Sandbox Code Playgroud)
IntVar = int("".join(filter(str.isdigit, StringVar)))
Run Code Online (Sandbox Code Playgroud)
小智 5
最适合每种复杂类型
str1 = "sg-23.0 300sdf343fc -34rrf-3.4r" #All kinds of occurrence of numbers between strings
num = [float(s) for s in re.findall(r'-?\d+\.?\d*', str1)]
print(num)
Run Code Online (Sandbox Code Playgroud)
输出:
[-23.0, 300.0, 343.0, -34.0, -3.4]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
169343 次 |
最近记录: |