我想知道我的字符串是否包含更多数字或更多字母。
我尝试在python中使用正则表达式,并在两者之间放置一个条件。
search_3 = '(\d) > (\D)'
words["aplha_or_numeric_mark"] = words["Words"].str.findall(search_3)
print(words)
实际结果只是每一行上的一个空列表
预期结果:
123ABCD应该输出1,因为字母>数字。
1234ABC应该输出0,因为字母<数字。
答案 0 :(得分:4)
您可以在生成器上使用zip
:
def is_alpha_more(s):
total_alphas, total_nums = zip(*((x.isalpha(), x.isdigit()) for x in s))
return 1 if sum(total_alphas) >= sum(total_nums) else 0
样品运行:
>>> s = '12,"BCD'
>>> is_alpha_more(s)
1
>>> s = '1234A,":B'
>>> is_alpha_more(s)
0
答案 1 :(得分:2)
这应该有效。
string = "ABCD12345"
num_count = 0
word_count = 0
for i in string:
if i.isalpha():
word_count += 1
elif i.isdigit():
num_count += 1
if word_count > num_count:
print(1)
else:
print(0)
答案 2 :(得分:2)
为什么不只使用re.findall
来查找两者的计数并获得结果?
import re
s = '123ABCD'
numAlphabets = len(re.findall('[a-zA-Z]', s))
numDigits = len(re.findall('\d', s))
if numAlphabets > numDigits:
print('More alphabets then digits')
elif numDigits > numAlphabets:
print('More digits then alphabets')
else:
print('Same numbers for both')
在这种情况下,它会打印,
More alphabets then digits
此外,如果所有要返回的字母(如果有更多的字母,则返回1),如果要返回的数字(如果少于字母,则返回0),则可以使用此功能,
import re
def has_more_alphabets(s):
if len(re.findall('[a-zA-Z]', s)) > len(re.findall('\d', s)):
return 1
else:
return 0
print(has_more_alphabets('123ABCD'))
print(has_more_alphabets('123@@334ABCD'))
print(has_more_alphabets('123###ad553353455ABCD'))
print(has_more_alphabets('123BCD'))
打印以下内容,
1
0
0
0
答案 3 :(得分:0)
有很多方法可以完成您的要求。正则表达式用于字符串中的“搜索”或“搜索并替换”。您需要数数。一个示例如下:
def test_string(text):
count_letters = 0
count_digits = 0
for character in text:
if character.isalpha():
count_letters += 1
elif character.isdigit():
count_digits += 1
if count_letters > count_digits:
return 1
return 0
您仍然没有定义两个数字相等时应该怎么办,但这很容易添加。