0

正規表現についてかなり基本的な質問があるかもしれません。次の正規表現があります。これは、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

この問題の解決策はありますか?どうもありがとう、
Serhiy。

編集:答えるコメントで述べたように、私の注意の誤りでしたが、ファイルにあるときの正規表現からのrのリモーションの解決策は大いに役立ちました。

4

1 に答える 1

4

ast.literal_evalPython ルールに従って文字列を解析するために使用できます。

>>> 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]']

もちろん、パターンが含まれていないため、両方のサンプル文字列に一致するものはありません!

于 2012-03-28T13:50:43.160 に答える