У меня есть 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, но если другая программа делает это лучше затем никакая важная персона :)
Большинство простых 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, проверьте свой инструмент, чтобы знать наверняка.
Если вы не можете обрабатывать более 9 подгрупп, почему бы сначала не сопоставить группы из 9, а затем выполнить цикл и применить регулярные выражения к этим совпадениям?
т.е. сначала совпадение (
, а затем соответствие каждой подгруппы на
.