简体   繁体   中英

Match everything expect a specific string

I am using Python 2.7 and have a question with regards to regular expressions. My string would be something like this...

"SecurityGroup:Pub HDP SG" 
"SecurityGroup:Group-Name" 
"SecurityGroup:TestName"

My regular expression looks something like below

[^S^e^c^r^i^t^y^G^r^o^u^p^:].*

The above seems to work but I have the feeling it is not very efficient and also if the string has the word "group" in it, that will fail as well...

What I am looking for is the output should find anything after the colon ( : ). I also thought I can do something like using group 2 as my match... but the problem with that is, if there are spaces in the name then I won't be able to get the correct name.

(SecurityGroup):(\w{1,})

Why not just do

security_string.split(':')[1]

To grab the second part of the String after the colon?

You could use lookbehind :

pattern = re.compile(r"(?<=SecurityGroup:)(.*)")
matches = re.findall(pattern, your_string)

Breaking it down:

  (?<=  # positive lookbehind. Matches things preceded by the following group
    SecurityGroup:  # pattern you want your matches preceded by
  )  # end positive lookbehind
  (  # start matching group
    .*  # any number of characters
  )  # end matching group

When tested on the string "something something SecurityGroup:stuff and stuff" it returns matches = ['stuff and stuff'] .

Edit:

As mentioned in a comment, pattern = re.compile(r"SecurityGroup:(.*)") accomplishes the same thing. In this case you are matching the string "SecurityGroup:" followed by anything, but only returning the stuff that follows. This is probably more clear than my original example using lookbehind.

Maybe this:

([^:"]+[^\s](?="))

Regex live here.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM