在Python中使用正则表达式从字符串中消除中心子字符串

时间:2018-12-18 10:23:17

标签: python regex python-3.x

我正在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

2 个答案:

答案 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$

请参见a demo on regex101.com

答案 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