else if (fjalaMin == null || fjalet.length() < fjalaMin.length())
{
fjalaMin = fjalet; // always the first input will be stored
}
我需要匹配像$(hello)这样的字符串。但现在这甚至匹配(你好)。
我是python的新手。那么我在这里做错了什么?
答案 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)
如果你不想用正则表达式做(我不一定;它们很难阅读)。
\$\(
(您正在使用括号,而不是$
和(
。$
或(
。只需if "$(" not in line
.index()
并捕获异常。这样的事情: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
编辑:每行只匹配一个$();你想要添加一个循环。