正则表达式匹配Python

正则表达式匹配Python,python,regex,Python,Regex,我想写3个不同的正则表达式。第一个应检测${任何字符序列},第二个应检测${任何字符序列=任何字符序列},第三个应检测${任何数字序列}或$任何数字序列 以下是我尝试过的: import sys import os import re ncmd = 1 regular = re.compile('${[a-z]*}') equals = re.compile('${*[=]*}') # string followed by equals followed by string numb

我想写3个不同的正则表达式。第一个应检测
${任何字符序列}
,第二个应检测
${任何字符序列=任何字符序列}
,第三个应检测
${任何数字序列}
$任何数字序列

以下是我尝试过的:

import sys
import os
import re

ncmd = 1
regular = re.compile('${[a-z]*}')
equals = re.compile('${*[=]*}')      # string followed by equals followed by string
numbers = re.compile('${(0-9)*}|$(0-9)*') # ${ANY_SEQUENCE_OF_DIGITS} or $ANY_SEQUENCE_OF_DIGITS

while(1):  #print line
    line = raw_input("(%s)$ " % ncmd)
    if regular.match(line):
        print "Regular"
        print(os.getenv(line[1:],''))
    elif equals.match(line):
        print "Equals"
    elif numbers.match(line):
        print "Numbers"
    else:
        print(line)
    ncmd += 1

美元符号本身就意味着“行尾”。考虑下面的代码:

>>> import re
>>> print re.compile('${[a-z]*}').match("${abcd}")
None
>>> print re.compile('\${[a-z]*}').match("${abcd}")
<_sre.SRE_Match object at 0x109fc51d0>
>>重新导入
>>>打印重新编译(“${[a-z]*}”).match(“${abcd}”)
没有一个
>>>打印重新编译('\${[a-z]*}')。匹配(${abcd})
第一个regexp是在行首查找行尾,因此。。。不。反斜杠美元符号的意思是“不,我的意思是,字面上,匹配美元符号。”


花括号也有特殊的含义,但这里没有。

也许你没有注意到美元符号和花括号在reg-ex中有特殊的含义?@Malvolio谢谢,这就是我错过的!不要把答案放在问题中。如果答案确实解决了你的问题,你或@Malvolio应该发布一个答案