#regex
#регулярное выражение
Вопрос:
У меня много строк, которые выглядят так
<HintPath>....packagesTest.5.8.2libnet35BLL.dll</HintPath>
Как мне искать, используя регулярное выражение, тексты между косыми чертами, которые содержат подстроку Test
?
В этом примере я должен получить Test.5.8.2
Это то, что я пробовал, но, похоже, это не работает: (?<=\)w*(Test)w*(?=\)
Комментарии:
1.
[^\]*Test[^\]*
— regex101.com/r/Su1ciI/1 . Если вам нужно проверить наличие обратной косой черты,(?<=\)[^\]*Test[^\]*(?=\)
2. Спасибо! Что, если теперь он соответствует 3 строкам кода в целом, потому что между двумя косыми чертами, которые находятся в разных строках, есть тест? Есть ли способ сопоставить, только если 2 косых черты находятся в одной строке?
3.
[^\n]*Test[^\n]*
— regex101.com/r/Su1ciI/24. Где вы используете регулярное выражение?
5.Использование
w
не соответствует точке. Вы могли бы повторить сопоставление точки и цифры\w*(Test(?:.d ) )\
regex101.com/r/6rbQVv/1 или используйте\w*(Test(?:.d ) )(?=\)
, если могут быть множественные совпадения друг за другом regex101.com/r/tGkg2W/1
Ответ №1:
Вы можете использовать
[^\n]*Test[^\n]*
Смотрите демонстрацию регулярных выражений.
Подробные сведения
[^\n]*
— 0 или более символов, отличных отTest
— строкаTest
[^\n]*
— 0 или более символов, отличных от
Если вам нужно убедиться, что
слева и
справа есть a, добавьте (?<=\)
положительный взгляд назад в начале шаблона и (?=\)
положительный взгляд назад в конце шаблона:
(?<=\)[^\n]*Test[^\n]*(?=\)
Ответ №2:
Вы пытаетесь сопоставить .5.8.2
с w*
, но w
не соответствует точке.
Если вы хотите сопоставить цифры после Test
, вы можете повторить 1 или более раз, сопоставляя точку и 1 или более цифр.
\w*(Test(?:.d ) )(?=\)
Объяснение
\
Совпадениеw*
Сопоставьте необязательные символы слова(
Группа захвата 1Test(?:.d )
Сопоставьте тест и повторите 1 или более раз, сопоставляя a.
и 1 цифры
)
Закрыть группу 1(?=\)
Позитивный прогноз, утверждение a
Демонстрация регулярных выражений
Другой вариант — добавить w
и точку к классу символов, чтобы соответствовать любому из них.
\w*(Test[w.]*)(?=\)