Наименьший шаблон для извлечения строкового значения с использованием RegEx

Я пытаюсь создать Regex с правильным шаблоном для получения только правильного значения строки. В моем текстовом файле есть:

Comment ID : 1234.5

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

1234.5

Каким будет правильный шаблон Regex?

вот что у меня пока

new Regex(@"^Comment ID\s*:\s*(?<comment_id>\w+)", RegexOptions.Multiline | RegexOptions.IgnoreCase); 

Но это также приводит к ненужной строке "Идентификатор комментария".

Можно ли не использовать маркер группы <comment_id> ?


person Junior Mayhé    schedule 23.11.2010    source источник


Ответы (4)


(?‹=Идентификатор комментария :\s*)[^\s]+

person mbeckish    schedule 23.11.2010
comment
Хороший! и это также работает: «новое регулярное выражение(@Comment\sID\s:\s(?‹comment_id›\d+), RegexOptions.IgnoreCase);’ - person Junior Mayhé; 23.11.2010

Вам не нужно использовать имена групп, но тогда вам придется ссылаться на них по индексам. Если левая часть строк не может содержать ":", то регулярное выражение может быть:

^[^:]+:\s*(.*?)\s*$

Кроме того, вы можете использовать метод экземпляра String.Split():

"abc : def".Split(new[] { ':' }, 2)
person Loki Kriasus    schedule 23.11.2010
comment
если вы разбиваете на char, вам не нужно помещать его в массив. Разделение является переменным для chars. - person Matt Ellen; 23.11.2010
comment
Мэтт, не в перегрузке, где можно указать аргумент count. - person Loki Kriasus; 23.11.2010

Если вам все равно, что осталось от :, вы можете просто использовать:

"^.*:\s*(?<comment_id>\w+)"

Вам также не нужно будет использовать RegexOptions для этого, так как нет строк, которые можно было бы игнорировать в случае

person thecoop    schedule 23.11.2010
comment
Действительно, левая часть всегда фиксирована (постоянные слова), как идентификатор комментария. Это как имя поля. - person Junior Mayhé; 23.11.2010
comment
Таким образом, .*: будет соответствовать всему, включая :, и будет делать то, что вам нужно. - person thecoop; 23.11.2010

Предоставленное вами регулярное выражение "^Comment ID\s*:\s*(?<comment_id>\w+)" не соответствует числам после точки

Попробуйте использовать это: (?!^Comment ID\s*:\s*)(?<comment_id>\d+\.*\d*)

Также вы можете изменить идентификатор комментария на любые слова или \w+

person arena-ru    schedule 23.11.2010