如何在python中匹配$(....)中的字符串

时间:2015-08-11 12:15:00

标签: python regex python-2.7

else if (fjalaMin == null || fjalet.length() < fjalaMin.length())
{
    fjalaMin = fjalet; // always the first input will be stored
}

我需要匹配像$(hello)这样的字符串。但现在这甚至匹配(你好)。

我是python的新手。那么我在这里做错了什么?

4 个答案:

答案 0 :(得分:6)

使用以下正则表达式:

\$\(([^)]+)\)

匹配$,后跟(,然后匹配最后一个),并捕获括号内的字符。

我们确实逃脱了$(),因为当您使用接受正则表达式的函数(例如findall)时,您不会希望$被视为特殊字符$,但作为文字&#34; $&#34; (同样适用于())。但请注意,由于您希望在外括号之间捕获文本,因此内括号没有引用。

请注意,当您不使用正则表达式时,不需要转义特殊字符。

答案 1 :(得分:2)

我相信一些事情:

import re
data = "$(hello)"

matchObj = re.match( r'\$\(([^)]+)\)', data, re.M|re.I)
print matchObj.group()

可能会成功。

答案 2 :(得分:2)

你可以这样做:

>>> import re
>>> escaper = re.compile(r'\$\((.*?)\)')
>>> escaper.findall("I like to say $(hello)")
['hello']

答案 3 :(得分:1)

如果你不想用正则表达式做(我不一定;它们很难阅读)。

  1. 你的for循环缩进是错误的。
  2. &#34; \ $ \(&#34;表示\$\((您正在使用括号,而不是$(
  3. 您不需要escpae $(。只需if "$(" not in line
  4. 即可
  5. 您需要检查$(之前找到)。目前,您的代码将匹配&#34; foo)bar $(baz&#34;。
  6. 不是检查$(和)是否在字符串中两次,而是最好只执行.index()并捕获异常。这样的事情:
  7. with open('templates/data.xml', 'r') as s:
        for line in s:
            try:
                start = line.index("$(")
                end = line.index(")", start)
                print(line[start+2:end])
            except ValueError:
                pass
    

    编辑:每行只匹配一个$();你想要添加一个循环。