I want to parse a string using regex, example of the string is
Lot: He said: Thou shalt not pass!
I want to capture Lot
as a group, and He said: Thou shalt not pass!
. However, when I used my (.+): (.+)
pattern, it returns
Lot: He said:
and Thou shalt not pass!
Is it possible to capture He said: Thou shalt not pass
using regex?
You need a non-greedy (or lazy) cardinality for the first group: (.+?): (.+)
.
More details on http://www.regular-expressions.info/repeat.html, chapter "Laziness Instead of Greediness".
give this a try:
([^:]+):\s*(.*)
(?=.*?:.*?:)(.*?):(.*)
You can use this.
See demo.
http://regex101.com/r/rX0dM7/9
You should use the flags ig - i = case insensitive, g = don't return after first match and a expression like "(.:) ?(.: .*)".
You can see example here https://regex101.com/r/SXjg1b/1
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With