2012-05-02 2 views
2

Мне нужно написать регулярное выражение, которое проверяет следующие слова: должно начинаться с буквы, может содержать {3,16} номера и \ или буквы.Как написать регулярное выражение, которое проверяет, начинается ли слово с буквы и содержит {3,6} числа и буквы?

Я пробовал следующее regex \b[A-Za-z]+[A-Za-z0-9]*{3,16}\b, но я получаю ошибку. Что не так?

+0

Какова точная ошибка? Также, пожалуйста, напишите код, в котором вы используете это. –

+0

Вы имеете в виду 6 (за заголовок) или 16 (за текст)? – Alnitak

ответ

2

Вы получаете ошибку из-за *. Удалите его, чтобы получить действительное регулярное выражение:

\b[A-Za-z]+[A-Za-z0-9]{3,16}\b 

Однако это регулярное выражение не совсем то, что вы хотите, а именно:

\b[A-Za-z][A-Za-z0-9]{2,15}\b 

Вам нужно {2,15} (и не {3,16}), так как первые подсчетов символов для одного из {3,16}

+0

это будет справедливо, если я добавлю круглые скобки, такие как \ b ([A-Za-z] + [A-Za-z0-9]) {3,16} \ b? – theateist

+0

@theateist: Нет, потому что тогда вам потребуется от 3 до 16 повторений '[A-Za-z] + [A-Za-z0-9]'. Кстати, «атеист» пишется с «h» :) –

+0

@TimPietzcker - В качестве альтернативы он - тот, у которого отсутствует «r» ;-) – Benj

3

Ваша проблема в том, что у вас второй класс символов есть как *, так и {3,16}, что означает, что {3,16} не имеет значения для количественной оценки. Дополнительно вы указываете, что входная строка должна начинаться с одной буквы, но + означает 1..many. Я полагаю, вы хотите:

\b     // boundary 
[A-Za-z]   // single character 
[A-Za-z0-9]{2,15} // A further 2-15 alpha numerics 
\b     // boundary 
0

некоторый код образца Python:

subject = """ 
This is som3 [email protected] text. 

One possible sixteen letter word is abstractednesses. 2012 is not 
a word as it does not contain any alphabetic charat3rs. 

Unfortunately conventionalizations contains 20 characters. 
""" 

import re 
words = re.compile('((?<=\s)[A-Za-z]\w{2,15})\W', re.M) 
res = words.findall(subject) 

# res is: 
# ['This', 'som3', 'text', 'possible', 'sixteen', 'letter', 'word', 
# 'abstractednesses', 'word', 'does', 'contain', 'alphabetic', 
# 'charat3rs', 'Unfortunately', 'contains', 'characters'] 
Смежные вопросы