我可能会看到类似这样的字符串:
ABC
DEF-123
456
789GH-IJK-0
我试图找出一个将字符串和数字组合在一起的正则表达式,如下所示:
(ABC)
(DEF-)(123)
(456)
(789)(GH-IJK-)(0)
我的第一个想法是使用(\ D * | \ d *)作为模式,但数字没有返回
答案 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)