Как узнать, содержит ли строка больше числового шаблона, чем буквенный шаблон? - PullRequest
0 голосов
/ 28 апреля 2019

Я хочу знать, содержит ли моя строка больше цифр или больше алфавитов.

Я попытался использовать регулярное выражение в Python и поместить условие между ними.

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

Фактический результат - просто пустой список в каждой строке

Ожидаетсярезультаты :

123ABCD должен вывести 1, так как алфавиты> числа.

1234ABC должен вывести 0, поскольку алфавиты <числа. </p>

Ответы [ 4 ]

3 голосов
/ 28 апреля 2019

Вы можете использовать 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
2 голосов
/ 28 апреля 2019

Почему бы просто не использовать 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
2 голосов
/ 28 апреля 2019

Это должно работать.

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)
0 голосов
/ 28 апреля 2019

Есть много способов выполнить то, что вы просите.Регулярные выражения предназначены для «поиска» или «поиска и замены» в строках.Вы должны посчитать.Одним из примеров может быть что-то вроде:

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

Вы все еще не определили, что должно произойти, если два числа равны, но это должно быть легко добавить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...