Regex остановить группу за словом - PullRequest
1 голос
/ 21 января 2011

У меня есть строка, которая выглядит примерно так:

2 [1:22:33] Загруженный файл: sometextand41245 Оригинальный файл: 1234_MyFile.ext space ...

и регулярное выражение, которое почти работает для получения группы после исходного файла: пробелы и пробелы ...

. + Оригинальное имя: \ s * (. +) \ S *

это даст мне 2 группы, одна имеет все, а другая даст мне нужную группу плюс еще:

1234_MyFile.ext space space space ...

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

1234_MyFile.ext

спасибо

Ответы [ 4 ]

0 голосов
/ 21 января 2011

В мире регулярных выражений может быть лотов вариантов рабочего шаблона (и это то, что я люблю!), Но мой совет должен быть как можно более конкретным.Я стараюсь избегать придумывать сумасшедшие регулярные выражения, которые покрывают любую возможную ситуацию, если я достаточно хорошо знаю исходный текст;) Мои 5 центов (с положительным взглядом сзади):

(?<=Original Name:\s*)(\S+)

Для моего регулярного выражения я предполагаю, что имя файла может быть любымно пробелы.

0 голосов
/ 21 января 2011

Вы могли бы быть более конкретным:

Original Name:\s*(\S+)

\S+ соответствует одному или нескольким непробельным символам.

Или вы можете сделать свой квантификатор ленивым, но тогда вам нужно обеспечить, чтобы хотя бы один пробел или конец строки соответствовали имени файла:

Original Name:\s*(.+?)(?:\s+|$)
0 голосов
/ 21 января 2011

Вы можете использовать \ S для сопоставления с любыми непробельными символами:

.+Original Name:\s*(\S+)\s*

Однако это не будет действительно так, как вы хотите, если исходное имя может содержать пробелы в конце, поэтомубыть лучшими альтернативами.В вашем примере есть пробелы после исходного имени, есть ли что-то после этих пробелов?Или строка заканчивается пробелами?Если оно заканчивается после пробелов, вы можете сделать что-то вроде:

Original Name:\s*(.+?)\s*$

Если оно не заканчивается после пробелов, заменить $ на то, что следует после них.

0 голосов
/ 21 января 2011

Попробуйте это:

.+Original\sFile:\s(.*)\s*

Проверено и работает на http://www.regextester.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...