如何知道一个字符串是否包含比字母模式更多的数字模式?

时间:2019-04-28 05:44:31

标签: python regex

我想知道我的字符串是否包含更多数字或更多字母。

我尝试在python中使用正则表达式,并在两者之间放置一个条件。

search_3 = '(\d) > (\D)'
words["aplha_or_numeric_mark"] = words["Words"].str.findall(search_3)
print(words)

实际结果只是每一行上的一个空列表

预期结果

123ABCD应该输出1,因为字母>数字。

1234ABC应该输出0,因为字母<数字。

4 个答案:

答案 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

您仍然没有定义两个数字相等时应该怎么办,但这很容易添加。