Выражение Regex к обратной ссылке больше чем 9 значений в замене

У меня есть regex выражение, которое пересекает строку и вытаскивает 40 значений, это смотрит вид если как запрос ниже, но намного больше и более сложный

est(.*)/test>test>(.*)<test><test>(.*)test><test>(.*)/test><test>(.*)/test><test>(.*)/test><test(.*)/test><test>(.*)/test><test>(.*)/test><test>(.*)/test><test>(.*)/test><test>(.*)/test><test>(.*)/test><test>(.*)/test><test>(.*)/test><test>(.*)/test>

Мой вопрос состоит в том, как я использую эти выражения с командой замены, когда число превышает 9. Это кажется как будто каждый раз, когда я использую \10 это возвращает значение для \1 и затем добавляет a 0 в конец.

Любая справка очень ценилась бы спасибо :)

Также я использую UEStudio, но если другая программа делает это лучше затем никакая важная персона :)

9
задан Mofi 15 December 2016 в 06:34
поделиться

2 ответа

Большинство простых Regex-движков, используемых редакторами, не способны обрабатывать более 10 совпадающих групп; не похоже, что UltraEdit может. Я только что попробовал Notepad++, и он даже не смог подобрать регекс с 10 группами.

Думаю, лучший вариант - написать что-нибудь быстрое на быстром языке с приличным парсером regex. но это не ответит на поставленный вопрос

Вот кое-что на Python:

import re

pattern = re.compile('(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)')
with open('input.txt', 'r') as f:
    for line in f:
        m = pattern.match(line)
        print m.groups()

Обратите внимание, что Python позволяет обратные ссылки, такие как \20: чтобы иметь обратную ссылку на группу 2, за которой следует литерал 0, вам нужно использовать \g<2>0, что является однозначным.

Редактировать: Большинство библиотек regex и редакторов, включающих механизм regex, должны использовать следующий синтаксис замены:

abcdefghijklmnop
search: (.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(?<name>.)(.)
note:    1  2  3  4  5  6  7  8  9  10 11 12 13
value:   a  b  c  d  e  f  g  h  i  j  k  l  m
replace result:
    \11      k1      i.e.: match 1, then the character "1"
    ${12}    l       most should support this
    ${name}  l       few support named references, but use them where you can.

Именованные ссылки обычно возможны только в очень специфических библиотеках regex, проверьте свой инструмент, чтобы знать наверняка.

3
ответ дан 4 December 2019 в 12:16
поделиться

Если вы не можете обрабатывать более 9 подгрупп, почему бы сначала не сопоставить группы из 9, а затем выполнить цикл и применить регулярные выражения к этим совпадениям?

т.е. сначала совпадение () + , а затем соответствие каждой подгруппы на .

1
ответ дан 4 December 2019 в 12:16
поделиться
Другие вопросы по тегам:

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