取出字符串部分和数字部分的字符串

时间:2011-06-14 11:51:11

标签: regex

我可能会看到类似这样的字符串:

ABC
DEF-123
456
789GH-IJK-0

我试图找出一个将字符串和数字组合在一起的正则表达式,如下所示:

(ABC)
(DEF-)(123)
(456)
(789)(GH-IJK-)(0)

我的第一个想法是使用(\ D * | \ d *)作为模式,但数字没有返回

3 个答案:

答案 0 :(得分:4)

如何使用内部非捕获子组...

((?:\D+)|(?:\d+))

perl的输出示例...

cat input | perl -ane 'chomp; print "looking at $_\n"; while(/((?:\D+)|(?:\d+))/g) {print "Found $1\n";}'
looking at BC
Found BC
looking at DEF-123
Found DEF-
Found 123
looking at 456
Found 456
looking at 789GH-IJK-0
Found 789
Found GH-IJK-
Found 0

答案 1 :(得分:2)

在替代品上使用+代替*:

(\D+|\d+)

答案 2 :(得分:0)

这似乎有效,但非常难看(反斜杠 - 瘟疫)。而不是做一个正则表达式,而是将它分成两个,一个用于处理数字,另一个用于字符。

$ sed 's/\([a-zA-Z-]\+\)/(\1)/g ; s/\([0-9]\+\)/(\1)/g' input
(BC)
(DEF-)(123)
(456)
(789)(GH-IJK-)(0)