regex 正则表达式Python回溯

pbwdgjma  于 2023-05-08  发布在  Python
关注(0)|答案(3)|浏览(184)

我有一个类似这样的字符串:

opt/custom/building/BuildingInput/address/BuildingUnderwritingInput/Name

我需要捕捉所有具有'Input'的单词并将它们从路径中删除。所以我的最后一个字符串是:

opt/custom/building/address/Name

我试过类似的方法,但没有用

x = "opt/custom/building/BuildingInput/address/BuildingUnderwritingInput/Name"
re.sub(r'Input/', r'/' , x.rstrip())

它给了我

opt/custom/building/Building/address/BuildingUnderwriting/Name

此处保留“BuildingInput”的“Building”和“BuildingUnderwritingInput”的“BuildingUnderwriting”。我希望整个单词“BuildingInput”和“BuildingUnderwritingInput”被省略。有什么帮助吗?或者如果有人可以告诉我如何从“Input”的出现回溯到“/”的第一次出现,以便我可以匹配整个单词“BuildingInput”和“BuildingUnderwritingInput”

8xiog9wr

8xiog9wr1#

使用此正则表达式删除所有在斜杠(/)内以Input结尾的单词:

(/)[^/]+Input(?=/)

对于您的案例:

x = "opt/custom/building/BuildingInput/address/BuildingUnderwritingInput/Name"
re.sub(r'(/)[^/]+Input(?=/)', r'' , x.rstrip())
ne5o7dgx

ne5o7dgx2#

目前你只搜索和替换Input/,你必须搜索整个单词,例如使用这个正则表达式:

re.sub(r'/\w*Input/', r'/' , x.rstrip())
bf1o4zei

bf1o4zei3#

删除0个或多个不是斜杠([^/]*)的字符,直到出现Input后跟斜杠:

import re
x = "opt/custom/building/BuildingInput/address/BuildingUnderwritingInput/Name"
print(re.sub(r'[^/]*Input/', r'' , x.rstrip()))

如果路径的最后一个元素也可能包含一个Input字(没有尾随的斜杠),你可以使用这个代替:

x = "address/BuildingUnderwritingInput"
print(re.sub(r'[^/]*Input(/|$)', r'' , x.rstrip()))

在这里,/或字符串结尾($)匹配Input之后。但是,如果最后一个单词匹配,则会留下一个斜杠。如果这是一个问题,您可以单独删除它:

x = "address/BuildingUnderwritingInput"
x = re.sub(r'[^/]*Input(/|$)', r'' , x.rstrip())
print(re.sub(r'/$', r'' , x))

相关问题