RegEx для N количество пробелов в строке - PullRequest
2 голосов
/ 14 апреля 2019

Я хочу создать группы, разделенные 4 пробелами. Проблема в том, что если в группе есть какой-либо пробел, кроме разделителя 4 пробелов, совпадение с регулярным выражением, которое я пробовал до сих пор, не совпадает

Это то, что я пробовал.Допустим, у меня есть эти 2 строки с 4 пробелами между словами

word 1    word 2
word1    word2

и регулярным выражением

^([^ {4}]*) {4}([^ {4}]*)$

Это соответствует только 2-й строке.Наличие любого пробела в любом месте, кроме разделителя пробелов 4, не будет совпадать с линией.

Я ожидаю совпадения и определения правильных групп в обеих этих строках.

Ответы [ 3 ]

1 голос
/ 14 апреля 2019

После некоторых экспериментов и, основываясь на хороших предложениях, я пришел с этим RegEx :

^(.*?)    (.*?)    (.*?)$

enter image description here

На поверхности он делает то, что мне нужно.Последняя строка имеет больше 4 пробелов в конце, но этого не должно быть.Любая ловушка, которую я не вижу?

1 голос
/ 14 апреля 2019

Вместо использования подхода не жадная точка-звезда .*? вы можете указать символы, которые вы хотите сопоставить.

Если ваши данные содержат, например, только слова, вы можете сопоставить символы 1+ слов \w+ с повторяющимся шаблоном (\w+(?: \w+)*) для соответствия пробелу и 1+ словам, за которыми следуют 4 пробела.

Обратите внимание, что если вы хотите сопоставить больше, чем символ слова, вы можете использовать символьный класс и добавьте символы, которым вы позволите соответствовать.

^(\w+(?: \w+)*) {4}(\w+(?: \w+)*) {4}(\w+(?: \w+)*)$

Regex demo

0 голосов
/ 14 апреля 2019

Этот RegEx может помочь вам разделить входные строки на пять групп, где вторая и четвертая группы - это четыре пробела:

([a-zA-Z0-9_ ]*)(\s{4})([a-zA-Z0-9_ ]*)(\s{4})([a-zA-Z0-9_ ]*)    

enter image description here

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

(\w+)(\s{4})(\w+)(\s{4})(\w+)

enter image description here

...