Input text:
## (Chat room 1) Received message from client 1: Nice to meet you!
(CR 1) RM 1: Nice to meet you!
(CR 1) SM 1: Nice to meet you!
## (Client 1) Received message from client 1: Nice to meet you!
(CL 1) RM 1: Nice to meet you!
(CR 0) SM 3: Nice to meet you!
## (Client 3) Received message from client 3: Nice to meet you!
(CL 3) RM 3: Nice to meet you!
Pattern:
(##[^\n]*\n)|(\((CR|CL) \d+\)) ((RM|SM) [0-9]:)|[a-zA-Z|!]*
My main problem is with matching Nice to meet you as a group and not individual words like seen below:

My initial solution was changing [a-zA-Z|!]* to [a-zA-Z|\s|!]* but it then captures all the space in the given trace text.
If you want another capture group, you can capture matching what is in the character class and repeat that 1+ times optionally followed by a space and again repeating the character class.
If you use [a-zA-Z!] you might possibly also match only multiple exclamation marks !!!
If you don't want to match that as a separate word, you can optionally match a single ! afterwards [a-zA-Z]+!? so you would only match words that could possibly end with an exclamation mark.
(##[^\n]*\n)|(\((CR|CL) \d+\)) ((RM|SM) [0-9]:)|([a-zA-Z]+!?(?: [a-zA-Z]*!?)*)
The updated part ([a-zA-Z]+!?(?: [a-zA-Z]*!?)*) matches:
( Capture group 6 (group 6 in the whole pattern)
[a-zA-Z]+!? Match 1+ times a-zA-Z and optional !(?:
[a-zA-Z]*!? Match a space, char a-zA-Z and optional !)* Close non capture group and repeat 0+ times to match more words) Close capture group 6Regex demo
Matching all chars in the character class, but not matching spaces only:
(##[^\n]*\n)|(\((CR|CL) \d+\)) ((RM|SM) [0-9]:)|([a-zA-Z!]+(?: [a-zA-Z!]*)*)
Regex demo
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