2016-02-24 3 views
1

Вопрос от here.Замена строки с помощью регулярного выражения

вход:

name 1111 color shape 
name 2222 shape color 
name 3333 shape 
name (4444) color shape version 
name.5555.JUNK.color.JUNK.shape.JUNK.version.JUNK 

с нетерпением жду:

name (1111) color shape 
name (2222) color shape 
name (3333) shape 
name (4444) color shape version 
name (5555) color shape version 

Стараюсь:

(name).\(?(\d{4})\)?.(?=.*?(color))(?=.*(shape))(?=.*?(version)?).*?$ 

заменить: $ 1 ($ 2) $ 3 $ 4 $ 5

name (1111) color shape 
name (2222) color shape 
name (4444) color shape 
name (5555) color shape 

другие

(name).\(?(\d{4})\)?.(?=.*?(color))(?=.*(shape))(?=.*?(version)).*?$ 

name (4444) color shape version 
name (5555) color shape version 

Как улучшить свое регулярное выражение Validate? Спасибо.

+0

Замените внешний вид опциональными группами и отрегулируйте их внутри. –

+0

Не могли бы вы пояснить, что вы подразумеваете под «с нетерпением жду»? –

ответ

0

Если вы не возражаете, возможно, имея несколько завершающих пробелов, это может быть столь же просто, как:

(name).\((\d{4})\)(?:.*?(color)(?:.*?(shape)(?:.*?(version))?)?)? 

Если вы хотите, чтобы это было проще и не против, возможно, тратить гораздо больше времени, оценивая :

(name).\((\d{4})\).*?(color)?.*?(shape)?.*?(version)? 

Для обоих из них, заменяя

$1 ($2) $3 $4 $5 

даст вам то, что вы хотите, в LEA если я правильно понял вопрос.

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