regex 正则表达式sub在python中未按预期工作[重复]

ntjbwcob  于 2023-02-05  发布在  Python
关注(0)|答案(2)|浏览(138)
    • 此问题在此处已有答案**:

Python re.sub with a flag does not replace all occurrences(3个答案)
2天前关闭。
我有以下字符串:

param = ' average(provider.cpuUtilization.Average) AS ECSCpuUtilization '

我有下面的正则表达式要说匹配尽可能多的空格前as和后as和单词后:

as_regex = r"\s+as\s+\w+"

我已经在regex测试器中验证了这与我正在寻找的相匹配。
我做如下调用:

new_param = re.sub(as_regex, '', param, re.IGNORECASE)

new_param是和之前一样的字符串。它让我发疯。调用

re.search(as_regex, param, re.IGNORECASE)

返回字符串AS ECSCpuUtilization,和我想要的完全一样。re.match没有,但我认为这不重要,因为如果我没弄错的话,re.sub和www.example.com是一样的。re.search if I'm not mistaken.
我忽略了什么?如果有什么需要澄清的请告诉我。

pgx2nnw8

pgx2nnw81#

用关键字参数设置标志。标志实际上应该作为第五个位置参数传递,而不是第四个。请参阅re.sub文档。

new_param = re.sub(as_regex, '', param, flags=re.IGNORECASE) # or re.I

或者,您可以在正则表达式本身中使用(?i)来忽略大小写。

as_regex = r"(?i)\s+as\s+\w+"
new_param = re.sub(as_regex, '', param)
n53p2ov0

n53p2ov02#

问题出在re.sub()函数的第二个参数上,该参数应该是替换字符串,但当前为空字符串,导致替换后字符串保持不变。
尝试将其更改为所需的替换字符串,例如:

new_param = re.sub(as_regex, ' NEW_STRING ', param, re.IGNORECASE)

相关问题