Пошук у складі блокнота ++


3

Привіт, я шукаю в тексті відповідність зразка блокнота ++, а також пропоную кілька замін. Але поки що, що я придумав, схоже, не працює.

Приклад тексту:

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>

Наперед Вам дякую!


Не могли б ви сказати нам на словах, чого має досягти ваша модель?
harrymc

Привіт, як описано в очікуваному результаті: Коли він знаходить число, за яким пробіл, він повинен помістити туди тег із цим номером всередині (<VERSETAG = 1>) і перед тим, як зустріти наступне число, за яким пробіл, він повинен поставити завершальний тег. (</VERSETAG>)
Pmicezjk

Я просто біжу з вашим новим тестовим випадком, він працює досить чудово. Ви перевірили . matches newline?
Toto

Так, справді зараз працює чудово !! Дивовижно! Чудова допомога!
Pmicezjk

Відповіді:


2

Оновлення відповідно до коментарів:

  • 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>

Екран захоплення

введіть тут опис зображення


Дивовижний Тото! Ми майже там! але, здається, це не працює, коли рядок починається з деяких текстів: For example, the followin is not working : 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. dlflflf4532llflflf, vjjsjsjss8776nndndn54; qcqaataab. 7 hhhshhshhshhshhshhs, bslslslsllslsllsll.
Pmicezjk

@Pmicezjk: просто замініть (?:^|\G )з (?:^\D*|\G )на початку регулярного виразу. Дивіться мою редакцію.
Toto

Still not working between (check around versetag 7 and 8). This is what I got when I replace (?:^|\G ) with (?:^\D*|\G ): <VERSETAG=7>blalallallal7600hhzhz ; nmmkzjzbzbzb34fspmmm:</VERSETAG> blslslslsavccacac, hkkdlfmfmmf56balalala. hdfmmfm87kdkkkkfkf. <VERSETAG=8>blalalallajhshduie.</VERSETAG>
Pmicezjk

1
@Pmicezjk: Я повністю переписав регулярний вираз, а не просто додав\D*
Toto

1
@Pmicezjk: Вибачте, я не розумію вас, мені здається, це працює. Ви перевірили . matches newline? Будь ласка, змініть своє питання і додати кілька рядків введення , які не працюють для вас.
Toto
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.