2010-05-14 3 views
0

У меня есть вход test1.test2.part01, который я хочу удалить до test1.test2. Единственное, что я знаю, это то, что он закончится partxx и, вероятно, точкой до partxx. Однако это не всегда будет раздельно. Другим примером ввода может быть testas1.tlp2.asd3.part10, который, разумеется, должен быть удален до testas1.tlp2.asd3.C# regex. Дополнительное совпадение после строки

Я сделал все это, никаких проблем. Проблема заключается в том, что точка заканчивается до partxx. Мое регулярное выражение на данный момент:

(.*)\.?part\d{1,2} 

Но оно будет содержать точку в группе. Я не хочу, чтобы точка была в группе. Нижеследующее работает так, как я хочу, учитывая, что точка существует, но она не всегда будет там.

(.*)\.part\d{1,2} 

Как я могу исключить дополнительную точку из группы?

ответ

3

Побег дот

(.*)\.?part\d{1,2} 

так, как вы его, точка интерпретируется как означающее «любой символ», а не буквальное точку.

В качестве альтернативы,

s/\.part\d\d?$//; 
+0

Спасибо, не могу поверить, что я пропустил это. Даже если я сбегу от него, это будет в группе –

+2

Я подозреваю, что это все равно будет содержать точку в группе, так как квантификатор внутри группы жадный. '(. *?) \.? part \ d {1,2}' может работать лучше. –

+0

@Tim Это похоже на трюк! :) Благодаря –

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