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

用Regex只匹配一行中的第一次出现。

Advertisement

我是一个完全陌生的regex,我将非常感谢任何帮助。

任务很简单。我有一个CSV文件,里面的记录是这样的。

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

我想把第一行的逗号换成空格,其余的逗号保持不变。有没有一种regex表达式可以只匹配第一个逗号?

我试过这样。^.....,. 这匹配了逗号,但是,它也匹配了逗号前的整个字符串长度,所以如果我尝试用一个空格来代替,所有的数字也会被删除。

Advertisement
Advertisement

答案 (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

在perl中,整个匹配和替换部分看起来就像:

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

。逗号被 “丢掉",因为它不在第一个捕获组中。

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

默认情况下(即没有g选项),只替换第一个匹配。

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

这应该只匹配第一个数字和逗号:^(\d{5}),。如果你想吞噬掉这一行中的所有其他内容,请将regex改成这样:^(\d{5}),(.*)$

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

更优雅的解决方案是使用懒人匹配:

s/^(.+?),/ /

&001

,它将通过从字符串的起点(^)向终点移动*一个*字符(.+?),直到找到第一个逗号为止。所有这组字符和第一个逗号的出现都将被组(“)和空格字符取代。

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

TextPad一直以来都有使用正则符号的功能,但你必须在不同的对话框中更改设置。 五位数

[0-9]+表示一个或多个数字(不只是5位数的邮政编码)

是另一个 “转义括号",标志着第一个搜索表达式的结束 []只是一个空格字符(你可以省去括号,但这样就没有人能在这个网页上看到它了。 -在替换表达式中,第一个搜索表达式

1是第一个搜索表达式,上面的括号之间的部分(一个或多个数字)

是一个制表符

所以搜索和替换命令寻找一个或多个数字,后面是一个空格。

我不认为有任何方法可以简单地找到 "5个数字后面的空格",所以你可以直接替换空格而不碰这些数字。你必须****找到5个数字(第一个字符串),然后是空格(第二个字符串)。然后,虽然看起来很多余或者很麻烦,但是把原来的5位数的字符串用ITSELF替换掉,后面的空格(第二个字符串)。

知道这个的人都忘了,新手都不知道这个。这就是为什么我在这里为你拼出来的原因,我的朋友。

Ed Poor 数学导师,纽约市退休计算机程序员,退休计算机程序员

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

要只匹配任何gex表达式的第一个出现,请删除所有标志。每一个regex表达式都有以下可能的标志,通常默认为使用全局标志,它将匹配多个出现的情况: - /g = 使用这个标志,搜索将查找所有匹配的情况,如果没有这个标志,则只返回第一个匹配的情况 - /i = 不区分大小写 - /m = 多行模式 - /s = 全部 .匹配新行字符 - /u = unicode - /y = 粘性模式(在特定位置搜索

Advertisement

相关问题

3
12
3
4
5
Advertisement