I want to match a section of a string that contains certain characters repeated, along with certain other characters only given a certain criteria. For instance matching characters a-z contained in angle brackets and numbers only if the number is preceeded by a plus.
Matching <abcde> to abcde.
<abcde1> should not match anything.
Matching <abcde 1> to abcde 1
Matching <abcde 1asd 2 3 4as> to abcde 1asd 2 3 4as
<abcde > should not match anything.
The regex I've tried is <([a-z]|(\ (?=[0-9])|[0-9](?<=[\ ])))*>.
CodePudding user response:
You can use
(?<=<)(?:[a-zA-Z] (?:\ \d )*) [a-zA-Z]*(?=>)
<((?:[a-zA-Z] (?:\ \d )*) [a-zA-Z]*)>
See the regex demo. Details:
(?<=<)- a positive lookbehind that requires a<char immediately on the left(?:[a-zA-Z] (?:\ \d )*)- one or more occurrences of[a-zA-Z]- one or more letters(?:\ \d )*- zero or more sequences ofand one or more digits
[a-zA-Z]*- one or more ASCII letters(?=>)- a positive lookahead that requires a>char immediately on the right.
