2015-04-22 5 views
0

Предположим, что мы имеем ниже текстовую информацию:Повторите регулярное выражение в строке

FEE AA  XXX093  Some Fee bla bla bla 
FEE BB  YYY111  Another Fee bla bla bla 

Я могу захватить плату код (AA) и сумма платы (XXX093) с этим регулярным выражением:

FEE (?<feecode>[A-Z]{2}) {7}(?<feeamt>[A-Z]{3}[0-9. ]{1,8}).*\n 

Но это только фиксирует эту информацию за плату в первой строке (AA), как я могу изменить регулярное выражение, чтобы захватить как гонорары (или X)?

ответ

2

Удалить \n как он предотвращает от согласования последней строки в строке (так как она заканчивается не \n):

FEE (?<feecode>[A-Z]{2}) {7}(?<feeamt>[A-Z]{3}[0-9. ]{1,8}).* 

Вот demo.

В качестве альтернативы, если можно указать конец строки ($):

FEE (?<feecode>[A-Z]{2}) {7}(?<feeamt>[A-Z]{3}[0-9. ]{1,8}).*(?:\n|$) 

Вот a variation of the regex с multiline опции только соответствует информации на отдельных строках:

^FEE (?<feecode>[A-Z]{2}) {7}(?<feeamt>[A-Z]{3}[0-9. ]{1,8}).*$ 
+0

BTW, какой язык вы используете, C#? –

2

Просто удалите символ \n, а также удалите пробел из класса символов. Так что вторая группа захвата не будет захватывать также пробелы, следующие за платой.

FEE (?<feecode>[A-Z]{2}) {7}(?<feeamt>[A-Z]{3}[0-9.]{1,8}) 

DEMO

+0

добавить начало строки якорь '^' перед 'FEE', если это необходимо. –

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