如何在Python中使用f-string与正则表达式?

49

如果我只使用原始字符串,则此代码有效。 但是,一旦我向 r 添加 f,它就停止工作。

是否有办法使f-strings与re的原始字符串配合使用?

import re

lines = '''

    04/20/2009; 04/20/09; 4/20/09; 4/3/09
    Mar-20-2009; Mar 20, 2009; March 20, 2009; Mar. 20, 2009; Mar 20 2009;
    20 Mar 2009; 20 March 2009; 20 Mar. 2009; 20 March, 2009
    Mar 20th, 2009; Mar 21st, 2009; Mar 22nd, 2009
    Feb 2009; Sep 2009; Oct 2010
    6/2008; 12/2009
    2009; 2010

'''
rmonth = 'a'
regex = fr'(\d{1,2})/(\d{1,2})/(\d{4}|\d{2})'
date_found = re.findall(regex, lines)

date_found

9
为什么你要使用f-strings?看起来你并不想进行任何内插操作。 - user2357112
1个回答

91

Python中的新f字符串以其自己的方式解释括号。你可以通过将括号加倍来转义你想在输出中看到的括号:

regex = fr'(\d{{1,2}})/(\d{{1,2}})/(\d{{4}}|\d{{2}})'

22
显然,原始的f-string是一种东西。真是奇怪。 - user2357112
1
@user2357112 我同意。正则表达式已经够复杂了。我现在避免混合使用它们。我甚至制作了更小的正则表达式并分别匹配它们。这让我的生活更轻松了。 - Jeremy Chen
2
仍然,原始f-string是PEP498的一部分(https://www.python.org/dev/peps/pep-0498/#raw-f-strings)。 - FredrikHedman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接