Regex 正则表达式删除嵌套的双引号?

Regex 正则表达式删除嵌套的双引号?,regex,Regex,如何解析一个包含可变数量双引号的字符串中的文本 例如,我可能遇到以下字符串: """The Cellar """"Serene"""" 16-Piece Glassware Set""" The Cellar "Serene" 16-Piece Glassware Set 或者这个字符串等等 ""The Cellar """Serene""" 16-Piece Glassware Set"" 我想显示这个字符串: """The Cellar """"Serene"""" 16-Piece

如何解析一个包含可变数量双引号的字符串中的文本

例如,我可能遇到以下字符串:

"""The Cellar """"Serene"""" 16-Piece Glassware Set"""
The Cellar "Serene" 16-Piece Glassware Set
或者这个字符串等等

""The Cellar """Serene""" 16-Piece Glassware Set""
我想显示这个字符串:

"""The Cellar """"Serene"""" 16-Piece Glassware Set"""
The Cellar "Serene" 16-Piece Glassware Set

似乎正则表达式在这里是一个理想的解决方案,因为有一个模式。在所有情况下,前n个双引号定义了模式。我想输出字符串的余额。

代码将根据您使用的编程语言(PHP、Perl、JavaScript等)而有所不同,但逻辑和正则表达式将是相同的。搜索设置模式的
“{2,}
。获取匹配字符串的长度。然后通过搜索
“{n}
并替换为空字符串来进行替换,其中
n
是第一个匹配的长度。

如果您能提供更多关于所使用语言的详细信息,它将有助于任何正则表达式风格的细节。我提供了一个小的递归函数来解决javascript中的问题

var string = '"""The Cellar """"Serene"""" 16-Piece Glassware Set"""';
var result;
function removeExcessQuotes(str)
{
    var match = str.replace('""', '"');
    result = match;
    if(match.indexOf('""') != -1)
    {
        result = match;
        removeExcessQuotes(match);
    }

    return result;
}

console.log(removeExcessQuotes(string));
试试这个代码-

str="\"\"\"The Cellar \"\"\"\"Serene\"\"\"\" 16-Piece Glassware Set\"\"\"";
replace_regexp=new RegExp(str.match(/"*/)[0], "g");
str=str.replace(replace_regexp, '');
console.log(str);
O/p


注意:此代码基本上检索字符串
str
开头的
编号,然后递归删除整个字符串中相同的

您使用什么语言?为什么在第二个示例中
Serene
后面有四个引号?打字错误?我不明白你的模式!。。你能再解释一下吗?非常感谢。至于语言,理想情况下我可以使用ApacheHive(Hadoop生态系统的一部分),它支持正则表达式。至于模式。。。在上面的示例中,前n个双引号定义了模式。在示例1中,有3个引号,因此我们看到的所有三个引号都应该被删除。在示例2中,有两个,因此无论我们在何处看到两个(从外到内工作),都应该删除它们。我还刚刚编辑了示例2,因为我没有删除最后一个引号(对不起)。我还可以通过Python流式处理字符串,这样我就有了更多的灵活性。Ed,这是正确的。理想情况下,我可以使用ApacheHive,它是Hadoop的类似SQL的Hadoop接口(它支持正则表达式)。我可以测试字符串的前10个字符来计算出现次数,以设置n。关于这个例子,我唯一的问题是,是否有一种方法可以在外面工作。所以在上面,当我将n设置为3时,例如1,我也得到了4的实例。例如,有没有办法将其限制为3个,而只将3个在室外工作?我对Hadoop不是很熟悉,但我理解这个问题,您最初只想得到第一个匹配的长度(例1中的3)。如果执行全局替换--将
的所有字符串替换为空字符串--则
将被替换为空字符串,而
将变为
,我相信这就是你拍摄的目的。如果我错了,请纠正我。约翰,非常感谢。我希望在语言中使用ApacheHive,并删除外部引号。但我也可以通过Python进行流式处理。这是一个额外的步骤,但如果我这样做的话,我肯定可以修改你的例子。非常感谢。