我想知道一个字符串是否包含“randomize”这个词。这个词我存在于字符串中的括号内外,但我只感兴趣,如果单词存在于括号的SIDE中。
mystring = "You said {single order='randomize'} that P.E is...Why?"
我明白我必须使用正则表达式,但到目前为止我的失败已经失败了。
基本上我想说:
look for "randomize" and check if its in brackets.
由于
答案 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[^{}]*}