Regex для проверки цифр, отличных от указанной строки - PullRequest
0 голосов
/ 01 ноября 2019

Нужно проверить, что строка содержит только цифры. any является единственной буквой, которая должна быть истинной

Код Psuedo

import re
test = '''123,456'''
bool(re.search('[\d+]', test))

Out

True

Ниже еще одна строка ожидает True

test = '''123,456,any''' #any is the only string expects as True

Ниже приведены некоторые примеры строк, которые ожидают быть False

test = '''abc,def,43''' #only digits accept
test = '''43,,''' #two #commas which makes illegal
test = '''abc,def,43,$'''#dollar makes illegal

Ожидаемый выход

False

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Вот решение, не являющееся регулярным выражением, которое вместо этого повторяет список, утверждая, встречаются ли только числа и строка any:

def nonNum(x):
    return int(not(re.match(r'^\d+$', x) or x == "any"))

def listValid(x):
    result = map(nonNum, x.split(','))
    return sum(result) == 0

test1 = "123,456,any"  # valid
test2 = "abc,def,43"   # only digits accept
test3 = "43,," #two"   # commas which makes illegal
test4 = "abc,def,43,$" # dollar makes illegal

print(listValid(test1))
print(listValid(test2))
print(listValid(test3))
print(listValid(test4))

Это печатает:

True
False
False
False
1 голос
/ 01 ноября 2019

Вы можете использовать это регулярное выражение:

^(?:\d+|any)(?:,(?:\d+|any))*$

Демонстрация RegEx

Подробности RegEx:

  • ^: начало
  • (?:\d+|any): совпадение 1+ цифр или текста any
  • (?:: начало группы без захвата
    • ,: совпадениезапятая
    • (?: \ d + | любая) : Match 1+ digits or text любая`
  • )*: конец группы без захвата. * указывает на совпадение 0 или более в этой группе.
  • $: конец
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...