提取以$ {开头并以...结尾的字符串

时间:2017-11-08 09:22:22

标签: python regex

我尝试从以${开头的文件中提取字符串,并使用Python以}结尾。我使用下面的代码来做到这一点,但我没有得到预期的结果。

我的输入文件如下所示:

Click    ${SWIFT_TAB}
Click    ${SEARCH_SWIFT_CODE}

我希望得到如下列表:

${SWIFT_TAB}
${SEARCH_SWIFT_CODE}

我目前的代码如下:

def findStringFromFile(file):
    import os,re    
    with open(file) as f:
        ans = [] 
        for line in f:

            matches = re.findall(r'\b\${\S+}\b', line)
            ans.extend(matches)        
    print (ans)

我期待一个以${开头并以}结尾的字符串列表,但我目前得到的只是一个空列表。

1 个答案:

答案 0 :(得分:1)

问题是你的正则表达式有问题,并且与你想要提取的字符串不匹配。具体来说,您有两个问题:

  1. {}是正则表达式元字符,就像$一样,如果你想要按字面意思匹配它们,也需要进行转义。
  2. \b匹配单词边界,即"单词字符"之间的位置。 (一个字母,一个数字或一个下划线)和一个"非单词字符" (其他任何东西)或字符串的开头/结尾。例如,空格与$之间不匹配。
  3. 要解决这些问题,请更改您的行:

    matches = re.findall(r'\b\${\S+}\b', line)
    

    为:

    matches = re.findall(r'\$\{\S+\}', line)
    

    它应该有用。

    有关详细信息,请参阅Python regular expressions documentation