Регулярное выражение с +(плюс) и пробелом

у меня есть следующая фраза

"my hooorrrr sssee strongggg"

мое регулярное выражение:

"(h+o+r+s+e+) s+t+r+o+n+g+"

это действительно только тогда, когда предложение:

"my hooorrrrsssee strongggg"

любое тело может помочь?

я хочу сопоставить независимо от пробела между словами.

example : "my h ooo rrr rss    se eee    stttro ngggg"

и другая проблема заключается в том, что какой-то символ заменяется числом, например, ниже:

"my h 0o0 rrr rs555sss    se ee333    stttr0 ngggg"

a replaced by 4
b replaced by 8
s replaced by 5
i replaced by 1
o replaced by 0

любое тело может помочь?

Спасибо


person Ahmad    schedule 01.10.2011    source источник
comment
Должен ли horsestrong (без пробела между лошадью и силой) также совпадать?   -  person Mark Byers    schedule 01.10.2011


Ответы (4)


Используйте * (пробел, звездочка), чтобы разрешить необязательные пробелы.

(h[h ]*o[o ]*r[r ]*s[s ]*e[e ]*)s[s ]*t[t ]*r[r ]*o[o ]*n[n ]*g[g ]*

Вы также можете рассмотреть возможность сопоставления любого пробела с \s (включая, например, табуляцию), а не просто пробел.

Чтобы разрешить числа или буквы, используйте класс символов, такой как [0o].

(h[h ]*[o0][o0 ]*r[r ]*[s5][s5 ]*[e3][e3 ]*)[s5][s5 ]*t[t ]*r[r ]*[o0][o0 ]*n[n ]*g[g ]*
person Mark Byers    schedule 01.10.2011
comment
спасибо за Ваш ответ. (h+ *o+ *r+ *s+ *e+) +s+ *t+ *r+ *o+ *n+ *g+ действительно, когда предложение мое h ooo rrr rss se eee stttro ngggg - person Ahmad; 01.10.2011
comment
но (h+ *[o0]+ *r+ *[s5]+ *[e3]+) +[s5]+ *t+ *r+ *[o0]+ *n+ *g+ недействительно, когда предложение мое h 0o0 rrr rs555sss se ee333 stttr0 ngggg - person Ahmad; 01.10.2011
comment
Это не соответствует, когда есть буква, пробел, одна и та же буква, например hooorss sseee - person Billy Moon; 01.10.2011
comment
Билли верно, это не соответствует моему h 0o0 rrr rs555sss se ee333 stttr0 ngggg - person Ahmad; 01.10.2011
comment
чем отличается это регулярное выражение (h[h]*[o 0 ]*r[r]*[s 5]*[e 3]) [s 5]*t[t]*r [r]*[o 0]*n[n]*g[g]* ? - person Ahmad; 01.10.2011
comment
Это также будет соответствовать hrse и h rse и hrtrng - person Billy Moon; 01.10.2011

Если вы хотите сопоставить пробелы, вам нужно включить это в регулярное выражение. \s — это шаблон, который соответствует пробельным символам (это пробел, табуляция, символы новой строки).

r+ будет соответствовать одному или нескольким символам r, но НЕ будет искать пробелы.

r+\s* с совпадением одного или нескольких символов r, за которыми следует ноль или более символов пробела.

Вы можете построить остальную часть своего выражения оттуда.

person Cameron Skinner    schedule 01.10.2011

Это соответствует каждой букве, за которой следует ноль или более одинаковых букв или пробелов.

h[h ]*o[o ]*r[r ]*s[s ]*e[e ]*s[s ]*t[t ]*r[r ]*o[o ]*n[n ]*g[g ]*

С указанными вами числами... (e = 3, o = 0, s = 5)

h[h ]*[o0][o 0]*r[r ]*[s5][s 5]*e[e 3]*[s5][s 5]*t[t ]*r[r ]*[o0][o 0]*n[n ]*g[g ]*
person Billy Moon    schedule 01.10.2011
comment
+1: Закрыть, но на «0o0» это не удается, потому что число идет первым. - person Mark Byers; 01.10.2011
comment
Теперь я думаю, что это соответствует всем случаям, да. - person Mark Byers; 01.10.2011

ОБНОВЛЕНО 2:

Основываясь на информации в вашем вопросе, вы можете использовать (обновлено, чтобы уловить случаи, на которые указал Тим Питцкер!):

[h][h ]*[o0][o 0]*[r][r ]*[s][s 5]*[e3][e 3]*[s5][s 5]*[t][t ]*[r][r ]*[o0][o 0]*[n][n ]*[g][g ]*

Я только что понял, что это делает ответ таким же, как у Марка Байерса!

person aevanko    schedule 01.10.2011
comment
но он позволяет вводить любое цифровое слово, мне просто нужна замененная цифра, спасибо, что я указал в своем вопросе :) - person Ahmad; 01.10.2011
comment
Обратите внимание, что вы также можете ограничить число, разрешенное для каждой буквы, просто заменив \d (любое число 0-9) буквами, например [e 3]+. - person aevanko; 01.10.2011
comment
Это также соответствует 12345678901 или h r e t o g и многим другим. - person Tim Pietzcker; 01.10.2011
comment
Исправлено для соответствия конкретным примерам. Первоначальный ответ должен был быть более общим, чтобы OP мог изменить его по мере необходимости. Извините за путаницу. - person aevanko; 01.10.2011
comment
Он по-прежнему соответствует строке, полностью состоящей из пробелов (и многим другим недопустимым строкам). - person Tim Pietzcker; 01.10.2011