Соответствие только первому вхождению в строке с Regex

Я абсолютно плохо знаком с regex, и я был бы очень признателен за любую справку.

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

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

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

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

42
задан 31.10.2011, 01:56

2 ответа

Шаблон соответствия мог быть:

^([^,]+),

Это означает

^        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

В, например, жемчуг, целое соответствие и замена были бы похожи:

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

Сменная деталь просто берет все это, которое соответствовало и заменяет ее первым блоком, Вы помнили и добавляете пространство. Кома "отбрасывается", потому что это не находится в первой группе фиксации.

53
ответ дан 07.12.2019, 08:42

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

3
ответ дан 07.12.2019, 08:42

Теги

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