2016-05-20 5 views
1

Эй, я совершенно не знаком с RegEx, может быть, кто-нибудь поможет мне с этой проблемой?RegEx не обрабатывает все строки в тексте с разделителями табуляции

https://regex101.com/r/mS2oB5/4

Мой Regular Expression

(\w.+?)\t(\w.+?)\t(\w.+?)\t(\d)\t(\w.+?)\t(\w.+?)\t(\w.+?)\t(\w.+?)\t(\w.+?)\t(\w.+?)\t(\w.+?)\t(\w.+) 

в текстовый файл (с разделителями табуляции)

C-380_TF-4318-028 none ID 4 none none 1.1 c 1.4 none none 26 RB 2,5% 
C-366_TF-4269-012 none REW 7 none none 1.1 c 17.1 none none 28 RB 7% 
C-1008_TF-4480-011 none none 0 WT H 1.1 c 17.16 none none 24 R 
C-1008_TF-4480-006 none none 0 WT H 1.1 c 2 none none 36 R 
C-388_TF-4351-022 none none 0 WM none 1.1 c 20.3 none none 21 R 
C-388_TF-4351-019 none none 0 WM none 1.1 c 22.3 none none 32 R 
C-397_TF-4437-001 none REW 7 WM none 1.1 c 26 none none 30 RB 7,5% 
C-388_TF-4351-013 none none 0 WM none 1.3 b 17.3 none none 14 RB 
C-366_TF-4269-004 none none 0 none none 2.1 17 none none n.d. R 
C-1008_TF-4480-013 none REW 7 WT H 2.1 c 1 none none 28 RB 
C-380_TF-4318-026 none REW 7 none none 2.1 c 1.2 none none 28 RB 2,5% 
C-380_TF-4318-016 none none 0 none none 2.1 c 17.1 none none 28 RB 2,5% 
C-380_TF-4318-015 none none 0 none none 2.1 c 6.36 none none 26 RB 10% 
C-397_TF-4437-002 none none 0 WM none 2.3 c 15.2 none none 28 RB 5% 
C-385_TF-4344-000b none ED 23 none none 2.3 c 2 10.4.3 none 26,5 CO 100% 
C-385_TF-4344-000a none REW 7 none none 2.5.1 c 20.2 none none 30 RB 21% 
C-366_TF-4269-022 none KW 7 none none 2.5.2 b 17.1 none none 10 RB 7% 

Почему Expression работает на некоторых записей и не работает на других, я понятия не имею? Спасибо за помощь ура!

+1

'.' также соответствует' \ w' и '\ t'. Вы заметили количество шагов, которые требуется выполнить вашему регулярному выражению? И поскольку это файл с разделителями табуляции, почему бы не разделить строки на вкладке? Хорошо, см. [Это регулярное выражение] (https://regex101.com/r/pR8bJ1/1) (довольно бессмысленно, так как вам просто нужно разделить каждую строку на '\ t'). –

+0

спасибо за вашу помощь wiktor! это действительно трюк. как я уже сказал, извините за мои вопросы, я думаю, что я буду 3-летним, изучая первые шаги в более простой разметке .... – utor

+0

Лучше использует синтаксический анализатор CSV для этого - при правильных настройках он будет разбирать это без время эффективно и правильно. –

ответ

0

Фактическая проблема заключается в том, что для каждого элемента требуется, чтобы каждый элемент имел длину не менее 2 символов с \w.+?. \w соответствует 1 символу слова и .+? соответствует не менее 1 символу. В последнем \w.+ также требуется не менее 2 символов. Кроме того, помните, что . соответствует как \w, так и \d и \t таким образом, ваше регулярное выражение очень неэффективно.

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

Только для образовательных целей, см this regex, где каждый элемент строки сопоставляются с [^\t]* - 0+ символов, кроме вкладки и ^/$ якоря для уменьшения возвратов накладных расходов.

+0

еще раз спасибо за вашу помощь, я ценю это много: thumbsup! – utor

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