i have those strings
hello,world,1.fin
hello,world,start11.fin
hello,world,start11,then,end22.fin
hello,world,111,then,222,then,end333.fin
hello,world,111,then,222,then,end333threes.fin
hello,world,111,then,222,then,end333threes.fin444
and i need to match the endings numbers only before the .
and after world,
and i expect to get
1
11
22
333
333
333
i tried this but it does not match the last case ,world,.*?(\d )\.
link then i tried this but it only get from begin ,world,.*?(\d ).*\.
link
.fin
is not static and it does change randomly to .fin444
or .444
CodePudding user response:
You can use
,world,(?:.*\D)?(\d )[^\W\d]*\.
,world,(?:.*\D)?(\d )[^\d.]*\.
See the regex demo.
Details:
,world,
- a fixed string(?:.*\D)?
- an optional sequence of any zero or more chars other than line break chars as many as possible and then a non-digit char(\d )
- Group 1: one or more digits[^\W\d]*
(or,[a-zA-Z_]*
can also be used, or even[^\d.]*
to match any zero or more chars other than digit and a dot) - zero or more word chars excluding digits\.
- a.
char.
CodePudding user response:
This should work
,world,.*?(\d )[^\d]*\.