我有一段代码试图进行搜索和替换。我的代码通常可以按预期工作,但是我遇到了一个用例不符合我的期望。在有问题的示例中,我有
api/auth/getuser/{sessionGuid}
最初
http://localhost:5000/
我的代码片段:
@GetMapping(value = "/books/{userId}")
@PreFilter("hasRole('ADMIN') or principal.userId == pathVar.userId")
public List<Books> getBooks(@PathVariable("userId" String userId) {
//do sth
}
我希望将input_text更改为
input_regex = 'Cooper S \\(3doors\\)'
subst_regex = 'Cooper S Hardtop 2 Door'
完成后,即使我确认确实从input_text = 'cooper s (3doors)'
创建了Matchobject,它也没有改变。如果对matchobject = re.search(input_regex,input_text,re.IGNORECASE)
if matchobject:
input_text=re.sub(input_regex,subst_regex,input_text,re.IGNORECASE)
的{{1}}进行了'Cooper S Hardtop 2 Door'
的操作,为什么re.search
找不到相同的匹配项并进行替换?
答案 0 :(得分:2)
对于正则表达式模式始终使用原始字符串。 re.sub
的第4个arg不是标志。因此,请确保在调用flags=re.IGNORECASE
时指定re.sub
>>> input_regex = r'Cooper S \(3doors\)'
>>> re.search(input_regex,input_text,re.IGNORECASE)
<re.Match object; span=(0, 17), match='cooper s (3doors)'>
>>> re.sub(input_regex,subst_regex,input_text, flags=re.IGNORECASE)
'Cooper S Hardtop 2 Door'
答案 1 :(得分:0)
您可以采用regex
的方式:
import re
input_text = 'cooper s (3doors)'
input_regex = '\(3doors\)'
subst_regex = 'Hardtop 2 Door'
print(re.sub(input_regex, subst_regex, input_text))
或者只是一种非regex
的方式:
print(input_text.replace('(3doors)', 'Hardtop 2 Door'))
答案 2 :(得分:0)
执行以下操作:
import re
input_regex = re.compile("\\(3doors\\)", re.IGNORECASE)
subset_regex = "Hardtop 2 Door"
input_text = "cooper s (3doors)"
result = input_regex.sub(subset_regex, input_text)
跳过您要进行重新搜索的部分。不需要结果是:
cooper s Hardtop 2 Door
注意:不要在正则表达式变量中给出整个文本。没用正则表达式不是这样的