正则表达式Python追溯

时间:2017-05-02 07:56:01

标签: python regex

我有一个像这样的字符串:

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

我需要抓住所有输入'输入'并从路径中删除它们。 所以我的最后一个字符串是:

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

" Building" " BuildingInput"和#34; BuildingUnderwriting" " BuildingUnderwritingInput"保留在这里。我想要整个单词' BuildingInput"和#34; BuildingUnderwritingInput"被省略。有帮助吗?或者,如果有人能告诉我如何从"输入"的发生回溯。第一次出现" /"所以我可以匹配整个单词" BuildingInput"和#34; BuildingUnderwritingInput"

3 个答案:

答案 0 :(得分:1)

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

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

对于你的情况:

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

您可以在此处测试:Refiddle Demo

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

删除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))