在字符串python正则表达式中的括号中找到给定的单词

时间:2014-02-14 16:50:45

标签: python regex string word

我想知道一个字符串是否包含“randomize”这个词。这个词我存在于字符串中的括号内外,但我只感兴趣,如果单词存在于括号的SIDE中。

mystring = "You said {single order='randomize'} that P.E is...Why?"

我明白我必须使用正则表达式,但到目前为止我的失败已经失败了。

基本上我想说:

look for "randomize" and check if its in brackets. 

由于

4 个答案:

答案 0 :(得分:2)

你可以使用一些否定的类:

>>> import re
>>> mystring = "You said {single order='randomize'} that P.E is...Why?"
>>> if mystring.find("randomize") != -1:
...     if re.search(r'{[^{}]*randomize[^{}]*}', mystring):
...         print("'randomize' present within braces")
...     else:
...         print("'randomize' present but not within braces")
... else:
...     print("'randomize' absent")

# => 'randomize' present within braces

答案 1 :(得分:0)

天真的简单方法:

>>> import re
>>> mystring = "You said {single order='randomize'} that P.E is...Why?"
>>> print re.search('{.*randomize.*}', mystring).group(0)

一旦我们有了这个,我们可以一点一点地改进它。例如,这被称为贪婪的正则表达式,这意味着:

>>> print re.search('{.*randomize*}', "{FOO {randomize} BAR}").group(0)
{FOO {randomize} BAR}

你可能希望它不贪婪,所以你应该使用'。*?'代替:

>>> print re.search('{.*?randomize.*?}', mystring).group(0)

此外,它不会处理嵌套:

>>> print re.search('{.*?randomize.*?}', "{FOO} randomize {BAR}").group(0)
{FOO} randomize {BAR}

如果要处理简单嵌套,可能需要匹配除其他括号之外的所有字符。

>>> print re.search('{[^}]*randomize[^{]*}', mystring).group(0) 

答案 2 :(得分:0)

这是正则表达式很难做到的事情。如果您执行re.escape(r"{.*?randomize.*?}")之类的操作,则可以匹配"Hello there, I'm going to {break} your randomize regex {foobar}"之类的内容,它将返回"{break} your randomize regex {foobar}"。您可以通过前瞻和后瞻断言来解决此问题,但不能不告诉我们括号是否可以嵌套,因为这将在"I'm going to break you {now with randomize {nested} brackets}"上失败

根据您的更新,括号永远不会嵌套,此正则表达式应匹配:

re.search("{[^}]*?randomize.*?}", mystring)

您可以使用.group(0)访问该论坛。把它们放在一起做类似的事情:

for mystring in group_of_strings_to_test:
    if re.search("{[^}]*?randomize.*?}", mystring).group(0):
        # it has "randomize" in a bracket
    else:
        # it doesn't.

答案 3 :(得分:0)

为了确保您不在嵌套{}内,它可能是

 {[^{}]*randomize[^{}]*}