我可能有关于正则表达式的非常基本的问题。我有以下正则表达式,当硬编码int应用程序工作正常,但后来我用ConfigParser读它似乎不起作用:
r"\[[+-]?\d+(?:\.\d+)?\]"
我的阅读方式是:
Config = ConfigParser.ConfigParser()
Config.read("test.conf")
test_regex = Config.get("test","test_regex")
search_pattern = re.compile(test_regex)
test_result = search_pattern.findall(text_to_parse)
test.conf的一部分
[test]
test_regex=r"\[[+-]?\d+(?:\.\d+)?\]"
测试输入可能如下:
text_to_parse = " Here is the [TEST-DONE]" // Success: my regex is extracting [TEST-DONE]
text_to_parse = " Here is the some text" // Failure my regex returns empty list
针对此问题的任何解决方案?
非常感谢,
谢尔盖。
答案 0 :(得分:4)
您可以使用ast.literal_eval
根据Python规则解析字符串:
>>> import ast
>>> ast.literal_eval(conf.get("test", "test_regex"))
'\\[[+-]?\\d+(?:\\.\\d+)?\\]'
但是首先更改配置文件以包含未转义的正则表达式更容易:
[test]
test_regex=\[[+-]?\d+(?:\.\d+)?\]
>>> conf.get("test", "test_regex")
'\\[[+-]?\\d+(?:\\.\\d+)?\\]'
也就是说,正则表达式似乎并不像你认为的那样做。匹配:
示例:
>>> re.findall(r'\[[+-]?\d+(?:\.\d+)?\]', 'foo [+10] bar [-3.5]')
['[+10]', '[-3.5]']
当然两个示例字符串中都没有匹配项,因为它们不包含模式!