2017-01-23 8 views
-1

Как мне сопоставить строку с использованием Regex на основе шаблона с определенным количеством символов для поиска?Строки соответствия Regex на основе определенного шаблона

Пример:

|V.2|58| 
10001|W20101|W20101|G00001||||學徒劍盾|8|9|768||-1|1||||||||40002||||||1|14||2||40027|40028|40029|40030||2|22|113|||||||||||2|50|100|7||||| 
10002|W30101|W30101|G00001||||學徒大斧|9|9|768||-1|1||||||||40003||||||1|17||3||40031|40032|40033|40034||2|26|142|||||||||||2|50|100|9||||| 

Если я знаю, что есть 58 вертикальные полосы на каждой линии, то как бы я создал регулярное выражение для соответствия этих строк на основе информации, которую я имею? И поскольку вы также можете сказать, что 58 в верхней части - это количество вертикальных баров, которые должны быть в каждой строке.

10479|I00208||G00005||||青鐵礦|29||0||-1|30||||3|||||||||100|5|1||54|$53$原始的礦石,整體泛著鐵青的色澤。 

#IMG$NoticeIcon#30~45級的副本掉落或跟公會商人購買。 
$7$能與其他材料結合,製作40級的合金材料。 
||||||||||||||||||||||||||| 

Другим примером является это. У этого есть несколько линий, но все еще находится в пределах 58 вертикальных полос.

Есть ли способ сопоставить шаблон, основанный на количестве вертикальных баров?

Заранее благодарен!

+0

непонятно, что вам нужно в точности? можете ли вы объяснить более ясно? –

+0

Единственная информация у вас есть количество вертикальных баров? Или у вас есть информация о том, какая строка должна находиться между вертикальной полосой X и X + 1? (для проверки) –

+1

'line.Split ('|'). Длина == 58'? –

ответ

1

Чтобы ответить на ваш непосредственный вопрос, да, вы можете сопоставить это с регулярным выражением:

^[^|]*(?:\|[^|]*){58}*$ 

при компиляции с использованием RegexOptions.Multiline, не будет совпадать с первого символа строки, пока ровно 58 бар (и любой не- штрих-символы после этого).

Протестируйте его live on regex101.com.

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

Однако, похоже, что вы не используете подходящий инструмент для работы. Может быть, парсер CSV лучше подходит? Кажется, ваш многострочный образец данных использует символ цитирования в записи, содержащей новые строки, то, что может обработать анализатор CSV, - и он также будет обрабатывать случаи, когда столбцы встречаются в поле с кавычками, что не может выполнить это регулярное выражение.

+0

Большое спасибо за ваш ответ Тим. Я не смотрел, какие инструменты на самом деле больше подходят для такой работы, поэтому я буду искать ее. С тех пор, как регулярное выражение может совпадать, я понял, что он может справиться с работой просто отлично, однако это очень громоздко. – Eperty123

+0

Также, если есть 59 вместо 58? Просто проверил его, и он оставил его непревзойденным. Как я могу это преодолеть? – Eperty123

+0

Полагаю, что вместо '58' поставить' 59' на вас не работает? Тогда вам в значительной степени не повезло - иначе как регулярное выражение сообщит, завершен ли набор данных, если строка заканчивается после 58 баров? Возможно, 59-я запись находится в начале следующей строки - возможно, следующая запись начинается там ... –

 Смежные вопросы

  • Нет связанных вопросов^_^