I am completely new to regex and I would greatly appreciate any help.

The task is simple. I have a CSV file with records that read like this:

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

I would like to replace the first comma with a space and leave the rest of the commas intact, for every line. Is there a regex expression that will only match the first comma?

I tried this: ^.....,. This matches the comma, however, it also matches the entire length of the string preceding the comma, so if I try to replace this with a space all of the numbers are deleted as well.

link|improve this question
what tool are you using? (sed, perl, awk, something else?) – Mat Apr 5 '11 at 6:07
Textpad (Windows) – cows_eat_hay Apr 5 '11 at 6:14
alt-mouseselect and press space? – djerry Apr 5 '11 at 7:01
feedback

2 Answers

up vote 3 down vote accepted

The matching pattern could be:

^([^,]+),

That means

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

In e.g. perl, the whole match and replace would look like:

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

The replacement part just takes the whole thing that matched and replaces it with the first block you remembered and appends a space. The coma is "dropped" because it's not in the first capturing group.

link|improve this answer
Awesome! Thank you Mat, it worked great. It actually did not work in Textpad (I think their regex is limited), so I ended up downloading PowerGrep, and used the search and replace with the expression you provided and it worked great. Thanks also for the nice explanation, it helps understand what's going on. – cows_eat_hay Apr 5 '11 at 7:15
feedback

This should match only the first number and the comma: ^(\d{5}),. If you'd like to gobble up everything else in the line, change the regex to this: ^(\d{5}),(.*)$

link|improve this answer
This also did the trick. I actually ended up using Mat's solution but I tested yours too and it works. Thanks for the help! – cows_eat_hay Apr 5 '11 at 7:18
@cows_eat_hay: no problem, glad you solved your problem in the end. – alex Apr 5 '11 at 12:44
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.