Блокнот ++ сложный поиск по шаблону

418
Pmicezjk

Привет, я ищу соответствие шаблону регулярных выражений notepad ++ в тексте и внесу некоторые замены. Но пока то, что я придумал, похоже, не работает.

Пример текста:

1 blablablabla. blablnsnsnns, blalblblbl: blablaa; balal blala. 2 blblb'blbµµ77777µµlblb blblb, blslsµµ105µµnlsllsl. 3 blalblblbl: blablaa; balal blala. 4 blblb'blbµµ9999µµlblb . Blblb, blslsnlsllsl. 5 jsjjsjj; gggbqbqbq: ghshhqhhqh !. Gsgsjjsskksk. 6 fshhhshs, nnsnnsns! nsnnsn. 7 blalallallal7600hhzhz ; nmmkzjzbzbzb34fspmmm : blslslslsavccacac, hkkdlfmfmmf56balalala. hdfmmfm87kdkkkkfkf. 8 blalalallajhshduie. 9 bslslslslls : blslsllsllls, bslslllsllsls. nsnsnnsnsnnsnns, hsbbbslslsllsllsls. 10 bslsllsllsllsllslls à sbsbbsbbsb, snsnnsnnsnnsn. 

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

группировка должна выглядеть так:

  • группа 1: число
  • группа 2: пробел после числа
  • группа 3: некоторый текст, который также может содержать некоторые цифры, но эти цифры не находятся между пробелами, а между (µµ).

Ожидаемые результаты:

<VERSETAG=1>blablablabla. blablnsnsnns, blalblblbl: blablaa; balal blala.</VERSETAG> <VERSETAG=2> blblb'blbµµ77777µµlblb blblb, blslsµµ105µµnlsllsl.</VERSETAG> <VERSETAG=3>blalblblbl: blablaa; balal blala.</VERSETAG> <VERSETAG=4>blblb'blbµµ9999µµlblb . Blblb, blslsnlsllsl.</VERSETAG> <VERSETAG=5>jsjjsjj; gggbqbqbq: ghshhqhhqh !. Gsgsjjsskksk.</VERSETAG> <VERSETAG=6>fshhhshs, nnsnnsns! nsnnsn.</VERSETAG> <VERSETAG=7>blalallallal7600hhzhz ; nmmkzjzbzbzb34fspmmm : blslslslsavccacac, hkkdlfmfmmf56balalala. hdfmmfm87kdkkkkfkf.</VERSETAG> <VERSETAG=8>blalalallajhshduie.</VERSETAG> <VERSETAG=9>bslslslslls :</VERSETAG> <VERSETAG=10>bslsllsllsllsllslls à sbsbbsbbsb, snsnnsnnsnnsn.</VERSETAG> 

Протестировано с этим Regex благодаря @Toto (но пока не работает должным образом, см. Результат ниже):

Look for : (?:^\D*|\G )(\d+)\s+(.+?)\R?(?=\s\d+\s|\z)   replace with : <VERSETAG=$1>$2</VERSETAG>\n 

Результат теста:

<VERSETAG=1>blablablabla. blablnsnsnns, blalblblbl: blablaa; balal blala.</VERSETAG> 2 blblb'blbµµ77777µµlblb blblb, blslsµµ105µµnlsllsl. <VERSETAG=3>blalblblbl: blablaa; balal blala.</VERSETAG> <VERSETAG=4>blblb'blbµµ9999µµlblb . Blblb, blslsnlsllsl.</VERSETAG> <VERSETAG=5>jsjjsjj; gggbqbqbq: ghshhqhhqh !. Gsgsjjsskksk.</VERSETAG> <VERSETAG=6>fshhhshs, nnsnnsns! nsnnsn.</VERSETAG> 7 blalallallal7600hhzhz ; nmmkzjzbzbzb34fspmmm : blslslslsavccacac, hkkdlfmfmmf56balalala. hdfmmfm87kdkkkkfkf. 8 blalalallajhshduie. 9 bslslslslls : <VERSETAG=10>bslsllsllsllsllslls à sbsbbsbbsb, snsnnsnnsnnsn.</VERSETAG> 

Заранее большое спасибо!

3
Не могли бы вы сказать нам, на словах, что ваша модель должна достичь? harrymc 5 лет назад 0
Привет, Как описано в ожидаемом результате: Когда он находит число, за которым следует пробел, он должен поместить туда тег с этим номером внутри () и перед тем, как встретить следующий номер, за которым следует пробел, следует поставить закрывающий тег. () Pmicezjk 5 лет назад 0
Я просто запускаю ваш новый тестовый пример, он работает довольно хорошо. Вы проверяли? соответствует newline`? Toto 5 лет назад 0
Да действительно сейчас работает отлично !! Потрясающие ! Большая помощь ! Pmicezjk 5 лет назад 0

1 ответ на вопрос

2
Toto

Обновление по комментариям:

  • Ctrl+H
  • Найти то, что: (?:^\D*|\G )(\d+)\s+(.+?)\R?(?=\s\d+\s|\z)
  • Заменить: <VERSETAG=$1>$2</VERSETAG>\n
  • проверить обернуть
  • проверьте регулярное выражение
  • ПРОВЕРЯТЬ . matches newline
  • Replace all

Объяснение:

(?:^\D*|\G ) # non capture group, beginning of line followed by 0 or more non digits or restart from the last match position (\d+) # group 1, 1 or more digits \s+ # 1 or more spaces (.+?) # group 2, 1 or more any character including new line, not greedy \R? # any kind of linebreak, optional (?=\s\d+\s|\z) # positive lookahead, make sure we have after 1 or more digits surround with spaces or end of file 

Результат для данного примера:

<VERSETAG=1>blablablabla. blablnsnsnns, blalblblbl: blablaa; balal blala.</VERSETAG> <VERSETAG=2>blblb'blbµµ77777µµlblb blblb, blslsµµ105µµnlsllsl.</VERSETAG> <VERSETAG=3>blalblblbl: blablaa; balal blala.</VERSETAG> <VERSETAG=4>blblb'blbµµ9999µµlblb . Blblb, blslsnlsllsl.</VERSETAG> <VERSETAG=5>jsjjsjj; gggbqbqbq: ghshhqhhqh !. Gsgsjjsskksk.</VERSETAG> <VERSETAG=6>fshhhshs, nnsnnsns! nsnnsn.</VERSETAG> <VERSETAG=7>blalallallal7600hhzhz ; nmmkzjzbzbzb34fspmmm: blslslslsavccacac, hkkdlfmfmmf56balalala. hdfmmfm87kdkkkkfkf.</VERSETAG> <VERSETAG=8>blalalallajhshduie.</VERSETAG> 

Сделать скриншот

** Потрясающе Тото! Мы почти на месте! но кажется, что он не работает, когда строка начинается с некоторых текстов: ** `Например, не работает followin:` `1 blablablabla. blablnsnsnns, blalblblbl: blablaa; балал блала. 2 blblb'blbµµ77777µμlblb blblb, blslsµµ105µµnlsllsl. 3 blalblblbl: blablaa; балал блала. 4 blblb'blbµµ9999µμlblb. Blblb, blslsnlsllsl. 5 jsjjsjj; gggbqbqbq: ghshhqhhqh! Gsgsjjsskksk. 6 fshhhshs, nnsnnsns! nsnnsn. dlflflf4532llflflf, vjjsjsjss8776nndndn54; qcqaataab. 7 hhhshhshhshhshhshhs, bslslslsllslsllsllll. Pmicezjk 5 лет назад 0
@Pmicezjk: просто замените `(?: ^ | \ G)` на `(?: ^ \ D * | \ G)` в начале регулярного выражения. Смотрите мое редактирование. Toto 5 лет назад 0
`До сих пор не работает (проверьте вокруг стихов 7 и 8). Это то, что я получаю, когда заменяю (?: ^ | \ G) на (?: ^ \ D * | \ G) `:`blalallallal7600hhzhz; nmmkzjzbzbzb34fspmmm: blslslslsavccacac, hkkdlfmfmmf56balalala. hdfmmfm87kdkkkkfkf. blalalallajhshduie.` Pmicezjk 5 лет назад 0
Я сделал именно то, что вы сказали: просто замените (?: ^ | \ G) на (?: ^ \ D * | \ G). В одном примере текста у меня нет тегов, когда строки начинаются с некоторых текстов. В другом примере текста у меня есть строка, которая начинается с полностью исчезнувшего текста. Pmicezjk 5 лет назад 0
@Pmicezjk: я полностью переписал регулярное выражение, а не просто добавил `\ D *` Toto 5 лет назад 1
`Я попробовал последнее средство:` `Найдите что: (?: ^ \ D * | \ G) (\ d +) \ s + (. +?) \ R? (? = \ S \ d + \ s | \ z ) `` Заменить на: $ 2 \ n` `Но некоторые строки, начинающиеся с цифр, больше не работают, как раньше! И не лучше, когда строки начинаются с какого-то текста. ` Pmicezjk 5 лет назад 0
@Pmicezjk: Извините, я вас не понимаю, мне кажется, это работает. Вы проверяли? соответствует newline`? Пожалуйста, [отредактируйте свой вопрос] (https://superuser.com/posts/1374975/edit) и добавьте несколько строк ввода, которые вам не подходят. Toto 5 лет назад 1
Давайте [продолжим это обсуждение в чате] (https://chat.stackexchange.com/rooms/85708/discussion-between-pmicezjk-and-toto). Pmicezjk 5 лет назад 0
@Pmicezjk: не стесняйтесь отмечать ответ как принятый, см .: https://superuser.com/help/someone-answers Toto 5 лет назад 0

Похожие вопросы