Ваш вопрос немного неясен, но я понимаю, что вы хотите сопоставлять только предложения, в которых есть только одна цифра, которая может повторяться в предложениях несколько раз, но не должна превышать одну цифру в каждом конкретном случае.Мол,
- Мне 30 лет.(Это не должно совпадать, поскольку у него 30, что больше, чем одна цифра)
- Мне 3 года.(Это должно совпадать, так как имеет 3, из которых только одна цифра)
- Мне 3 года, а вам 30 лет.(Это не должно совпадать, так как у него 3 и 30, 30 из которых состоит из нескольких цифр)
- Мне 3 года, а вам 5 лет.(Это должно совпадать, потому что у него есть 3 и 5, которые являются только одной цифрой)
- Я хороший мальчик.(Это не соответствует, потому что у него вообще нет цифр)
Дайте мне знать, если это то, что вы хотите.И если да, вы можете использовать это регулярное выражение,
^(?!.*\d\d)(?=.*\d).*$
Объяснение:
^
-> Начало строки (?!.*\d\d)
-> Отрицательный взгляд вперед, который гарантирует, что предложение не содержит многозначных чисел. (?!.*\d\d)
-> Отрицательный взгляд вперед, который гарантирует, что предложение не содержит многозначных чисел. .*
-> Соответствует любому тексту $
-> Конец строки
Демо
Вот пример кода Python,
arr= ["I'm 30 years old.","I'm 3 years old.", "I'm 3 years and you are 30 years old.", "I'm 3 years and you are 5 years old.", "I am a good boy."]
for s in arr:
if re.search("^(?!.*\d\d)(?=.*\d).*$", s):
print(s+' --> Sentence has only one digit')
else:
print(s+' --> Sentence has either no digit or more than one digit')
Какие выходы,
I'm 30 years old. --> Sentence has either no digit or more than one digit
I'm 3 years old. --> Sentence has only one digit
I'm 3 years and you are 30 years old. --> Sentence has either no digit or more than one digit
I'm 3 years and you are 5 years old. --> Sentence has only one digit
I am a good boy. --> Sentence has either no digit or more than one digit