我想在 variable
中使用 regex
,如何在 Python
中执行此操作?
TEXTO = sys.argv[1]
if re.search(r"\b(?=\w)TEXTO\b(?!\w)", subject, re.IGNORECASE):
# Successful match
else:
# Match attempt failed
原文由 Pedro Lobito 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想在 variable
中使用 regex
,如何在 Python
中执行此操作?
TEXTO = sys.argv[1]
if re.search(r"\b(?=\w)TEXTO\b(?!\w)", subject, re.IGNORECASE):
# Successful match
else:
# Match attempt failed
原文由 Pedro Lobito 发布,翻译遵循 CC BY-SA 4.0 许可协议
您必须将正则表达式构建为字符串:
TEXTO = sys.argv[1]
my_regex = r"\b(?=\w)" + re.escape(TEXTO) + r"\b(?!\w)"
if re.search(my_regex, subject, re.IGNORECASE):
etc.
注意 re.escape
的使用,这样如果您的文本有特殊字符,它们就不会被这样解释。
原文由 Ned Batchelder 发布,翻译遵循 CC BY-SA 3.0 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3.1k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.4k 阅读✓ 已解决
1 回答3.9k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
从 python 3.6 开始,您还可以使用 Literal String Interpolation ,“f-strings”。在您的特定情况下,解决方案是:
编辑:
由于评论中有一些关于如何处理特殊字符的问题,我想扩展我的答案:
原始字符串(’r’):
在处理正则表达式中的特殊字符时,您必须了解的主要概念之一是区分字符串文字和正则表达式本身。 这里 解释得很好:
简而言之:
假设您不想在
TEXTO
\b
,而是要匹配字符串\boundary
。你必须写:这仅适用于我们使用的是原始字符串(正则表达式以 ‘r’ 开头),否则我们必须在正则表达式中写入“\\\boundary”(四个反斜杠)。此外,如果没有 ‘\r’,\b’ 将不再转换为单词边界,而是转换为退格!
转义:
基本上在任何特殊字符前面放一个反斜杠。因此,如果您希望 TEXTO 中有一个特殊字符,则需要编写:
NOTE: For any version >= python 3.7:
!
,"
,%
,'
,,
,/
,:
,;
,<
,=
,>
,@
和`
不会被转义。只有在正则表达式中有意义的特殊字符仍然被转义。_
自 Python 3.3 起未转义。(s. here )大括号:
如果要使用 f 字符串在正则表达式中使用量词,则必须使用双花括号。假设您要匹配 TEXTO 后跟 2 位数字: