我正在Python3中定义一个函数来使用正则表达式操作字符串。
我很难找到正则表达式来提取字符串的一部分。考虑以下输入字符串
str1 = "http://99.199.9.90:22/some/path/here/id_type_51549851/read"
str2 = "http://99.199.9.90:22/some/path/here/myid_31654/read"
对于上述字符串,我想获取以下字符串作为输出:
output_str1: "http://99.199.9.90:22/some/path/here/id_type_/read"
output_str2: "http://99.199.9.90:22/some/path/here/myid_/read"
输出字符串中的最后一个下划线不是必需的。
更笼统地说,最好使其与以下字符串一起使用(如果可能):
str3 = "http://99.199.9.90:22/some/path/here/myid_alphaBeta/read"
输出
"http://99.199.9.90:22/some/path/here/myid_/read"
请注意,已经发明了IP,端口,路径,但是结构是这样的。
我想从read
之前和最后一个下划线之后的字符串部分中删除,考虑到之前可能还有另一个下划线的事实。
因此,基本上我的输出应包含原始字符串的第一部分和最后一部分,并匹配不属于输出部分的中央部分。换句话说,它应该剪切字符串的中心匹配部分
我从输出整个字符串的正则表达式开始:
"(.+?)/some/path/here/(.+?)/read"
我尝试了类似(.+?)/some/path/here/(.+?)_[.+?]/read
但是没有用。
现在的功能是这个(要成为的部分:
def cutURL(str):
res = str
if (bool(re.search("(.+?)&someMatch=[0-9]+", str))):
res = re.search("(.+?)&someMatch=[0-9]+", str).group()
elif (bool(re.search("(.+?)/devices/(.+?)/read", str))):
res = re.search("(.+?)/some/path/here/(.+?)/read", str)
return res
答案 0 :(得分:0)
在上面的示例中,您可以替换
public class MyUtils {
@Autowired MyObjectContainer myObjectContainer;
public void setMyObjectFromDB() {
MyObject myDBObject = new MyObject();
//
// getting myObjectFromDB;
//
myObjectContainer.setMyObject(myDBObject);
}
public MyObjectContainer getMyObjectContainer() {
return myObjectContainer;
}
}
使用
_\w+/read$
答案 1 :(得分:0)
使用此
str2 = "http://99.199.9.90:22/some/path/here/myid_31654/read"
str2 = re.sub("myid_[0-9]+","myid_",str2)
有关sub
方法的文档和更多应用程序,请参考docs