开发者

Take out string parts and number parts of string

开发者 https://www.devze.com 2023-03-12 14:30 出处:网络
I may have strings that will look something like this: ABC DEF-123 456 789GH-IJK-0 And Im trying to figure out a Regex开发者_StackOverflow that will group it on strings and numbers, like this:

I may have strings that will look something like this:

ABC
DEF-123
456
789GH-IJK-0

And Im trying to figure out a Regex开发者_StackOverflow that will group it on strings and numbers, like this:

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

My first thought was to use (\D*|\d*) as pattern, but the numbers isnt returned


How about using inner non-capturing sub groups...

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

Example output from 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


Use + instead of * on the alternatives:

(\D+|\d+)


This seems to be working, but quite ugly (backslash-plague). Instead of doing one regexp, separate it into two, one to handle digits and one for characters.

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

精彩评论

暂无评论...
验证码 换一张
取 消