Regexp заменить.Hashtag все слова после "Теги:" разделитель - PullRequest
0 голосов
/ 29 сентября 2018

В длинном файле, используя регулярное выражение в Notepad ++, я хотел бы заменить каждое вхождение (пробел) после Tags: (со столбцом :) дефисом #, также удаляязапятые ,.

Например:

word1 word2 word3 Tags: communication, inspirational, love, relationships

должно стать

word1 word2 word3 #communication #inspirational #love #relationships

1 Ответ

0 голосов
/ 29 сентября 2018

Это регулярное выражение будет делать то, что вы хотите:

(\s+Tags:\s+|(?<!^|$)\G)\s*,?\s*(\w+)

Первая часть (\s+Tags:\s+|(?<!^|$)\G) ищет либо слово Tags:, либо начало предыдущего совпадения (\G), где это невозможнонаходиться в начале или в конце строки ((?<!^|$)).Вторая часть ищет слово, которому предшествует необязательная запятая и пробел.

Regex101 Demo

В блокноте откройте диалоговое окно Replace, выберите Wrap aroundи Regular expression, и сделайте замену строкой #\2 (это пробел, после которого следует #, затем \2).

Выберите Replace All.

Примервведите:

word1 word2 word3 Tags: communication, inspirational, love, relationships
word4 word5 word6 Tags: single, mother, blue, sunny

После замены:

word1 word2 word3 #communication #inspirational #love #relationships
word4 word5 word6 #single #mother #blue #sunny

Обновление

Если вы хотите разрешить использование специальных символов в словах (например, -) измените \w в регулярном выражении, например, [\w-].Чтобы разрешить любые символы в словах, измените \w в регулярном выражении на \S.

Обновление 2

Поскольку могут быть строки, которые не имеютпробел перед Tags:, необходимо изменить \s+ до Tags: на \b.т.е.

(\bTags:\s+|(?<!^|$)\G)\s*,?\s*(\S+)

Обновленная демоверсия Regex101

...