I want to find the hash comments that don't contain the text inside curly braces. But if it starts with #, it's all comments.
Input:
# This is comment 1
TEST # This is comment 2
{ # Not comment}; { # Not comment } # This is example 3
# This is comment 4
TEST Not comment
{ # Not comment}; { # Not comment } # This is comment 5
{# Not comment}; { # Not comment }={# Not comment} {# Not comment}={# Not comment} {# Not comment}={# Not comment} # This is comment 6
# This is comment 7 {# This is comment 8}
# This is comment 9
Not comment {Not comment}={# Not comment}
Output:
# This is comment 1
# This is comment 2
# This is comment 3
# This is comment 4
# This is comment 5
# This is comment 6
# This is comment 7 {# This is comment 8}
# This is comment 9
I want to be able to achieve what I want with one line of regular expression.
Currently I can only find all strings starting with # by \{.*?}(*SKIP)(*F)|#[^#{}\n].*
However it doesn't work in python(I hope not PCRE).
If possible I hope it can be done without installing the module 'regex' to parsing PCRE(Perl Compatible Regular Expressions).
CodePudding user response:
You can fix begin and end of line separators at the boundaries of your regex, and then look for:
- all strings that start with a
#
and that don't include new lines:"(#[^\n] )"
optionally precedeed by:
- any character (other than a new line) followed by a space
"(. )?"
Here's the final regex:
"(^|\n)(. )?(#[^\n] )"
Tested at https://regex101.com. Use backreference to retrieve your comment within Group 3.
Does it work for you?