【发布时间】:2019-05-28 16:52:36
【问题描述】:
我有以下代码:
currencies = ['USD', 'GBP', 'EUR', 'JPY', 'CHF', 'SEK', 'DKK', 'NOK', 'SGD', 'HKD', 'AUD', 'TWD', 'NZD', 'CNY', 'KRW', 'INR', 'CAD', 'VEF', 'EGP', 'THB', 'IDR', 'PKR', 'MYR', 'PHP', 'MXN', 'VND', 'CZK', 'HUF', 'PLN', 'TRY', 'ZAR', 'ILS', 'ARS', 'CLP', 'BRL', 'RUB', 'QAR', 'AED', 'COP', 'PEN', 'CNH', 'KWD', 'SAR']
exclusive_regexp = ".*\/" + ".*|.*\/".join(currencies) + ".*"
searching_regexp = "^(?! (" + exclusive_regexp + ")$)(.*\/.*)$"
searching_regexp = re.compile(searching_regexp)
with open('raw.txt', 'r') as unprocessed_ticks:
print(re.findall(searching_regexp, unprocessed_ticks.read()))
它应该找到所有可以与生成的正则表达式匹配的字符串。
我使用 regex101.com 在线工具探测了生成的正则表达式。它适用于 python 风格。但在实际代码中,它不匹配任何东西: https://regex101.com/r/70uiuE/7 为什么会发生?
【问题讨论】:
-
我怀疑
re.findall(searching_regexp, unprocessed_ticks.read(), re.M) -
在 python 中不是 \ 一个转义字符,所以你需要双重转义它吗?
-
您希望这匹配什么文本?斜线不需要在 Python 中进行反斜杠转义。
-
.*你如此随意地洒可能会导致它的匹配方式比你想要的更多。 -
我认为
exclusive_regexp = "/(?:{})".format("|".join(currencies))和searching_regexp = "^(?! .*" + exclusive_regexp + ")[^/]*/.*$"也可以。只需传递re.M标志。