2011-04-05 05:57:20 +0000 2011-04-05 05:57:20 +0000
45
45

Совпадая только первое событие в ряду с Regex

, я совершенно новичок в регексе и был бы очень признателен за любую помощь.

Задача проста. У меня есть CSV-файл с записями, которые читаются так:

12345,67890,12345,67890
12345,67890,12345,67890
12345,67890,12345,67890
12345,67890,12345,67890
12345,67890,12345,67890

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

Я попробовал это: ^.....,. Это соответствует запятой, однако, оно также соответствует всей длине строки, предшествующей запятой, так что если я попытаюсь заменить это на пробел, то все числа также будут удалены.

Ответы (6)

55
55
55
2011-04-05 06:26:54 +0000

Соответствующий шаблон может быть:

^([^,]+),

Это означает

^ starts with
[^,] anything but a comma
+ repeated one or more times (use * (means zero or more) if the first field can be empty)
([^,]+) remember that part
, followed by a comma

In e.g. perl, все совпадение и замена будет выглядеть следующим образом:

s/^([^,]+),/ /

Заменяющая часть просто берет всю совпаденную вещь и заменяет ее первым запомнившимся блоком и добавляет место. Кома “сброшена”, потому что она не входит в первую группу захвата.

7
7
7
2012-08-01 21:31:36 +0000
s/,/ /

Это, по умолчанию (т.е. без опции g), заменяет только первое совпадение.

3
3
3
2011-04-05 06:26:08 +0000

Это должно совпадать только с первым номером и запятой: ^(\d{5}),. Если вы хотите проглотить все остальное в строке, измените регекс на следующее: ^(\d{5}),(.*)$.

2
2
2
2015-05-13 00:44:34 +0000

Более элегантным решением является использование ленивого соответствия:

s/^(.+?),/ /

, который будет группировать символы, перемещаясь от начала строки (^) к концу байт символов (.+?) на каждом шагу до тех пор, пока он не найдет первую запятую знака. Вся эта группа вместе с первой запятой будет заменена на группу (“) и знак пробела.

1
1
1
2015-02-28 21:07:59 +0000

В TextPad всегда была возможность использовать позиционную нотацию, но вы должны изменить настройки в другом диалоговом окне. Чтобы использовать настройки TextPad по умолчанию для регулярных выражений, необходимо “экранировать” открывающиеся и закрывающиеся круглые скобки:

Заменить пробел после 5-значного zip-кода, в начале каждой строки

^\([0-9]+\)[]

С tab

\t

Как и было сказано выше, ^ означает начало строки

( это “экранированные круглые скобки” и оно отмечает начало первого поискового выражения, т.е., пять цифр

[0-9]+ означает одну или несколько цифр (а не только 5-значный почтовый индекс)

) является еще одной “экранированной скобкой” для обозначения конца первого поискового выражения

[] это просто символ пробела (можно пропустить скобки, но тогда никто не сможет увидеть его на этой веб-странице : -)

В заменяющем выражении

\1 является первым поисковым выражением, часть между скобками выше (одна или несколько цифр)

\t является символом табуляции

Так что команда поиска и замены ищет одну или несколько цифр, а затем пробел. Затем она заменяет все это на ту же самую группу цифр с последующим пробелом.

Я не думаю, что есть какой-то способ просто найти “пробел, который приходит после 5 цифр”, так что вы можете просто заменить пробел, не касаясь цифр. Вы должны поиск 5 цифр (первая строка) с последующим пробелом (вторая строка). Затем, хотя это кажется избыточным или громоздким, ОТМЕНЯЙТЕ исходную строку из 5 цифр с помощью ITSELF, за которой следует закладка (вторая строка).

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

Эд Бедный репетитор по математике и пенсионер компьютерный программист Нью-Йорк

0
0
0
2019-11-26 19:24:16 +0000

Для соответствия только первому появлению любого регексуального выражения удалите все флаги. Каждое регексное выражение сопровождается следующими возможными флагами и, как правило, по умолчанию используется глобальный флаг, который будет соответствовать более чем одному вхождению:

  • /g = С этим флагом поиск ищет все совпадения, без него - возвращается только первое совпадение
  • /i = регистровая нечувствительность
  • /m = многострочный режим
  • /s = all . для соответствия символу новой строки \n
  • /u = юникод
  • /y = липкий режим (поиск в определенном местоположении)

Похожие вопросы

3
11
12
4
5