Есть ли способ прочитать первое слово всей строки из файла с ReGex? - PullRequest
0 голосов
/ 24 марта 2019

Я смотрю любой текстовый файл для анализа конкретной информации.Информация - это имя комнаты, координаты_х и координаты_у.Имя комнаты может быть любым именем строки (abc, 6a7b8c, _test1n6_ и т. Д.) И исключает «#», потому что тогда оно будет частью моего управления ошибками.Чтобы объяснить текстовый файл более, я хочу всегда игнорировать первую строку, а после первой строки это комната, которая создается в координатах x и y (например, 2 5 0 имеет комнату под названием 2 с координатами(5, 0)).Я не получаю все необходимые строки из файла, который мне нужен.Например, я получаю только те, которые начинаются с любого символа без, но также получаю строки, которые мне пока не нужны.Я только начал изучать Regex день назад, поэтому потерпите меня, пожалуйста:).

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

Это мое текущее регулярное выражение:

\S+(\w+[0-9]) | \s+\w*[A-Z]

и файл txt таков:

3
2 5 0
##start
0 1 2
##end
1 9 2
3 5 4
######################
###lol123
###1234124
#111shouldnotread#~!~
6ajhk 888 888 
D_c7 10 10
Enz4 11 11
Maf9 15 15
Eex5 18 18
U_e6 21 21
Nip5 25 25
Gw_5 28 28
Vio7 31 31
His7 34 34
Exh6 37 37
Iq_8 42 42
Qky2 45 45
Tac1 49 49
X__5 51 51
Xlb4 55 55
0-2
0-3
2-1
3-1
2-3

Вывод:

888 
888 
D_c7 
Enz4 
Maf9 
Eex5 
U_e6 
Nip5 
Gw_5 
Vio7 
His7 
Exh6 
Iq_8 
Qky2 
Tac1 
X__5 
Xlb4 

Пока я получаю все, что хочу, но пока не совсем.Видите ли, у меня есть некоторые из моих комнат, но не одна с "6ajhk", которая является названием моей комнаты и имеет координаты (888, 888).Остальное уже обрабатывается отдельно.Спасибо за ваше время и терпение.

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

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

/^\w*(?!\n)(?=\s)/gm

Обратите внимание, что я использую многострочный флаг /m.

Вы можете проверить это здесь: https://regexr.com/4arnh

Редактировать: если вы не хотите включать однозначные названия комнат, вы можете использовать:

/^\w{2,}(?=[^\S\n])/gm

где 2 - минимальное количество символов в строке комнаты. Демо здесь: https://regexr.com/4arnq

0 голосов
/ 24 марта 2019

Я думаю, что это должно делать то, что вы хотите.

^([^\s#]{4,5}) (\d+) (\d+)

См .: https://regex101.com/r/Kqakb8/2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...