У меня есть текстовый файл, который выглядит примерно так:
Reference: 10001
Title: This is a text file
Description: A text file containing some simple strings
<0x0c>
Reference: 10002
Title: This is an xml file
Description: An xml file containing some generic data
<0x0c>
По сути, там, где я вижу такой шаблон, как <word>:
Я хотел бы вставить "
до и после <word>
, затем я хотел бы вставить "
до и после значения, за которым следует ,
, например:
"Reference" : "10001",
Пока я могу получить всю строку, используя следующее регулярное выражение:
^.*(Reference:|Title:).*$
Но мне интересно, есть ли лучший способ выбрать только нужный мне текст, а затем выполнить необходимое преобразование.
@WiktorStribiżew Вау, это очень хорошо. Спасибо
Если вы не хотите сопоставлять всю строку, а только текст, вы можете использовать 3 группы захвата и использовать границы слов \b
:
\b(Reference|Title)(:\s*)(\d+)\b
\b(Reference|Title)
Граница слова, захватите в группе 1 ссылку или заголовок(:\s*)
Захватите в группе 2 двоеточие и 0+ пробельных символов(\d+)\b
Захват в группе 3 1+ цифр, за которыми следует граница словаВ замене используйте 3 группы захвата и заключите первую и третью в двойные кавычки:
"$1"$2"$3"
Демонстрация регулярных выражений
Спасибо, это отличный способ сделать это. Этот тестер регулярных выражений действительно полезен, оцените ссылку.
У меня есть еще один вопрос, может ли это также искать строки с пустыми значениями? например TestLine:
Затем вы можете удалить границу слова в конце и повторить цифры 0+ раз, например regex101.com/r/ihS6Rm/2
Отлично, действительно хорошо сделано, хотя похоже, что в вашей демонстрации есть небольшая ошибка. Посмотрите на поля Заголовок/Описание.
Попробуйте
^(\w+)(:\s*)(.*)
=>"$1"$2"$3",