2016-08-19 7 views
-2

В настоящее время я борюсь с правилом RegEx, чтобы извлечь текстовую часть (2 символа) из строки.Извлечь часть текста с помощью RegEx

Строка имеет следующий формат:

"ML6G 100.00 TEST" 

То, что я хочу, чтобы извлечь здесь является L6 (это может измениться, но длина всегда будет 2 символа), и я знаю, что символы перед L6 может различаются по длине (1,2,3,4,5 символов)

так что строка может выглядеть следующим образом:

«MMMMML6G 132,00 ТОС» -> здесь я хочу, чтобы извлечь L6 как хорошо, но снова символы до этого могут различаться по длине (1,2,3,4,5 символов).

Я знаю, что могу извлечь/матч текст со следующим выражением:

^.{0,2} 

Но я не знаю, как я могу извлечь что-то после (1 или 2 или ... или 5 символов)

+0

Что может следовать L6? Один персонаж и пробел? Или другие вещи? – trincot

+0

M + (. {2}) сделают для вас –

+0

Попробуйте '^ \ S {1,5} (\ S {2})' и получите содержимое первой группы захвата, см. Https://regex101.com/ r/nK3dK2/1 –

ответ

1

Предполагая, что там будет только несколько «М» до и всегда «G» после того, как я бы следующее регулярное выражение:

[M]+(.{2,2})G 

Объяснение

[М] + соответствует 1 или более 'М'

(. {2,2}) соответствует любому символу с длиной ровно 2 возвращения этих символов в Sperate группы.

«G» соответствует «G» ;-)

+0

Извините, я должен был быть более конкретным. На самом деле я хочу извлечь два символа после первых 1,2,3,4 или 5 символов. Так строка может содержать: XXXL6P 100.00 TEST (здесь мне нужно извлечь 6P) или строка может быть KJSHW7P 100,00 TEST (здесь мне нужно извлечь 7P) – user2606751

+0

Чтобы написать регулярное выражение, мы имеем чтобы узнать что-то конкретное, что мы можем сопоставить. Предполагая, что есть 1 - 5 символов до и только 1 символ после пробела, вы можете взять^[AZ] {1,5} ([A-Z1-9] {2,2}) [AZ] {1 , 1} \ w – Fischermaen

+0

@ user2606751, почему вы говорите, что 'XXXL6P 100.00 TEST' должен дать' 6P', в то время как в вопросе вы говорите 'ML6G 100.00 TEST' должен дать' L6'. Почему это последнее не '6G'? Какова логика выбора двух символов? Когда взять последние два слова, оставьте последнего персонажа? – trincot

1

Использование обратной ссылки потреблять повторяющиеся символы в начале, а затем захватить следующие 2 символа:

^(.)\1*(..) 

Это захватывает символы например, L6, в группе 2.

+0

Извините, я должен был быть более конкретным. – user2606751

+0

Может быть любой персонаж, ему не обязательно быть MMMMM. Итак, я хочу извлечь 2 символа после первых 1,2,3,4 или 5 символов. – user2606751

+0

Значит, символ «М» повторится? Как насчет следующего символа «G» - это всегда есть место, или вам все равно, что следует? – Bohemian

1

Вы можете использовать простой positive lookahead, чтобы найти первый прорыв (пробел) и обратную ось 2 позиции от последнего символа первого сегмента.

(?=(.{2}).\s).*$ 

https://regex101.com/r/fV7vG3/1

+0

Нет, это не сработает: * На самом деле я хочу извлечь два символа после первых 1,2,3,4 или 5 символов. Поэтому строка может содержать: XXXL6P 100.00 TEST (здесь мне нужно извлечь 6P), или строка может быть KJSHW7P 100.00 TEST (здесь мне нужно извлечь 7P) * –

+1

А, я вижу ... Где вы это читаете? Это регулярное выражение отлично подходит для OP –

+0

Зачем смотреть вперед? Просто '(..) \ s. *' – Bohemian

Смежные вопросы