标记忽略转义字符的Java正则表达式

标记忽略转义字符的Java正则表达式,java,regex,tokenize,Java,Regex,Tokenize,考虑一个测试字符串,如 Irrelevant start|group 1|group 2 with \| escaped|group 3|group 4|Irrelevant end 如何使用单个java正则表达式来解析,提取由bar(x)分隔的所有组,而忽略中间的逃逸条(\),以及无关的开始和结束部分(不包含条)?< /p> 查找后断言的一个问题是,在Java中,它不允许可变长度字符串,并且上面提到的组没有预定义的您可以使用拆分来完成。我们希望在一个\前面没有\的上进行拆分。我们必须在正则表

考虑一个测试字符串,如

Irrelevant start|group 1|group 2 with \| escaped|group 3|group 4|Irrelevant end

如何使用单个java正则表达式来解析,提取由bar(x)分隔的所有组,而忽略中间的逃逸条(\),以及无关的开始和结束部分(不包含条)?< /p>


查找后断言的一个问题是,在
Java
中,它不允许可变长度字符串,并且上面提到的组没有预定义的您可以使用
拆分
来完成。我们希望在一个
\
前面没有
\
上进行拆分。我们必须在正则表达式中转义
,以匹配
,而不是将其用作
。为了匹配正则表达式中的一个文本
\
(在后面的负片中),我们需要
\\

import java.util.Arrays;

public class Test {

    public static void main(String[] args) {
        String str = "Irrelevant start|group 1|group 2 with \\| escaped|group 3|group 4|Irrelevant end";
        System.out.println(str);

        String[] arr = str.split("(?<!\\\\)\\|");

        String[] new_arr = Arrays.copyOfRange(arr, 1, arr.length - 1);
        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(new_arr));

    }
}

对于一个简单的消极落后的例子,让我们看看
(?。这与前面没有
a
b
匹配。在我们的例子中,我们希望匹配一个文本
\
而不是
a
,以及
\
而不是
b
,这就是为什么我们需要所有
\
的原因。有很多资源可供查找,但如果您想进一步阅读,可以使用



此外,Spider Boris指出,这是脆弱的,在某些情况下它不起作用。与不应该使用正则表达式解析XML的方式类似,CSV格式通常应该与解析库一起使用。

可以使用
拆分
。我们希望在
之前没有
\
上进行拆分。我们有要在正则表达式中转义
以匹配
,而不是将其用作
。要匹配正则表达式中的文本
\
(在后面的否定视图中),我们需要
\\

import java.util.Arrays;

public class Test {

    public static void main(String[] args) {
        String str = "Irrelevant start|group 1|group 2 with \\| escaped|group 3|group 4|Irrelevant end";
        System.out.println(str);

        String[] arr = str.split("(?<!\\\\)\\|");

        String[] new_arr = Arrays.copyOfRange(arr, 1, arr.length - 1);
        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(new_arr));

    }
}

对于一个简单的消极落后的例子,让我们看看
(?。这与前面没有
a
b
匹配。在我们的例子中,我们希望匹配一个文本
\
而不是
a
,以及
\
而不是
b
,这就是为什么我们需要所有
\
的原因。有很多资源可供查找,但如果您想进一步阅读,可以使用



此外,Spider Boris指出,这是脆弱的,在某些情况下它不起作用。与不应该使用正则表达式解析XML的方式类似,CSV格式通常应该与解析库一起使用。

可以使用
拆分
。我们希望在
之前没有
\
上进行拆分。我们有要在正则表达式中转义
以匹配
,而不是将其用作
。要匹配正则表达式中的文本
\
(在后面的否定视图中),我们需要
\\

import java.util.Arrays;

public class Test {

    public static void main(String[] args) {
        String str = "Irrelevant start|group 1|group 2 with \\| escaped|group 3|group 4|Irrelevant end";
        System.out.println(str);

        String[] arr = str.split("(?<!\\\\)\\|");

        String[] new_arr = Arrays.copyOfRange(arr, 1, arr.length - 1);
        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(new_arr));

    }
}

对于一个简单的消极落后的例子,让我们看看
(?。这与前面没有
a
b
匹配。在我们的例子中,我们希望匹配一个文本
\
而不是
a
,以及
\
而不是
b
,这就是为什么我们需要所有
\
的原因。有很多资源可供查找,但如果您想进一步阅读,可以使用



此外,Spider Boris指出,这是脆弱的,在某些情况下它不起作用。与不应该使用正则表达式解析XML的方式类似,CSV格式通常应该与解析库一起使用。

可以使用
拆分
。我们希望在
之前没有
\
上进行拆分。我们有要在正则表达式中转义
以匹配
,而不是将其用作
。要匹配正则表达式中的文本
\
(在后面的否定视图中),我们需要
\\

import java.util.Arrays;

public class Test {

    public static void main(String[] args) {
        String str = "Irrelevant start|group 1|group 2 with \\| escaped|group 3|group 4|Irrelevant end";
        System.out.println(str);

        String[] arr = str.split("(?<!\\\\)\\|");

        String[] new_arr = Arrays.copyOfRange(arr, 1, arr.length - 1);
        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(new_arr));

    }
}

对于一个简单的消极落后的例子,让我们看看
(?。这与前面没有
a
b
匹配。在我们的例子中,我们希望匹配一个文本
\
而不是
a
,以及
\
而不是
b
,这就是为什么我们需要所有
\
的原因。有很多资源可供查找,但如果您想进一步阅读,可以使用



此外,Boris the Spider指出,这是一个脆弱的问题,在某些情况下它是不起作用的。与不应该使用正则表达式解析XML的方式类似,CSV格式通常应该与解析库一起使用。

此外,Matt的回答是,我认为这是一个非常好的主意,如果您仍然对正则表达式感兴趣,可以使用这个正则表达式:

([\w ]+(\\\|[\w ]+)?)
在这里,您可以查看一个工作示例:

正如您所看到的,每个比赛的第一组都包含相关内容,您可以放弃第一组和最后一组比赛


希望能帮助

除Matt的回答外,我认为这是一个非常好的主意,如果您仍然对regex感兴趣,可以使用此选项:

([\w ]+(\\\|[\w ]+)?)
在这里,您可以查看一个工作示例:

正如您所看到的,每个比赛的第一组都包含相关内容,您可以放弃第一组和最后一组比赛


希望能帮助

除Matt的回答外,我认为这是一个非常好的主意,如果您仍然对regex感兴趣,可以使用此选项:

([\w ]+(\\\|[\w ]+)?)
在这里,您可以查看一个工作示例:

正如您所看到的,每个比赛的第一组都包含相关内容,您可以放弃第一组和最后一组比赛


希望能帮助

除Matt的回答外,我认为这是一个非常好的主意,如果您仍然对regex感兴趣,可以使用此选项:

([\w ]+(\\\|[\w ]+)?)
在这里,您可以查看一个工作示例:

正如您所看到的,每个比赛的第一组都包含相关内容,您可以放弃第一组和最后一组比赛


希望能有所帮助

不要为此使用正则表达式。请不要。使用像优秀的OpenCSV这样的CSV解析库。这是一个非常好的主意,我已经有了