我试图刮一页,我有问题检查一个beautifulsoup元素是否包含数字。我想清理字符串,如果它包含数字。在这种情况下,我只想保留数字,这是一个邮政编码。但在我清理它之前,我必须检查,如果该元素甚至有一个邮政编码。
我使用以下代码搜索元素:
soup.find("span",{"class": "locality"}).get_text()
Output: 68549 Ilvesheim, Baden-Württemberg,
我尝试使用以下代码检查字符串,但它总是说" False"
soup.find("span",{"class": "locality"}).get_text()).isalnum()
soup.find("span",{"class": "locality"}).get_text()).isdigit()
还有另一种检查方法吗?因为它包含" 68549"应该说是TRUE
答案 0 :(得分:2)
您可以使用this simple function检查字符串是否包含数字:
def hasNumbers(inputString):
return any(char.isdigit() for char in inputString)
但我认为这是一个XY问题,你真正想要的是提取邮政编码的正则表达式,请查看以下内容:
\s(\d+)\s
(您可能需要根据邮政编码的可接受形式进行更改)
>>> s = 'Output: 68549 Ilvesheim, Baden-Württemberg,'
>>> re.findall(r'\s(\d+)\s', s)
['68549']
如果字符串不包含邮政编码,您可以通过确保结果re.findall()
的长度为0来检查:
>>> re.findall(r'\s(\d+)\s', 'No zip code here!')
[]
答案 1 :(得分:0)
使用正则表达式:
import re
hasnumber = re.findall(r'\d+', "68549 Ilvesheim, Baden-Württemberg")
if hasnumber:
print(hasnumber)
<强>输出:强>
['68549']
答案 2 :(得分:0)
如果您要查找邮政编码,可能需要考虑有效范围。例如德国邮政编码的长度恰好是5位数:
import re
for test in ['68549 Ilvesheim, Baden-Württemberg', 'test 01234', 'test 2 123456789', 'inside (56089)']:
if len(re.findall(r'\b\d{5}\b', test)):
print "'{}' has zipcode".format(test)
因此,对于这三个示例,第三个测试与邮政编码不匹配:
'68549 Ilvesheim, Baden-Württemberg' has zipcode
'test 01234' has zipcode
'inside (56089)' has zipcode
{5}
告诉正则表达式与\b
正好匹配5位数,确保任意一侧的单词边界。如果您想要五个或大小的数字,请使用{5,6}