标记忽略转义字符的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解析库。这是一个非常好的主意,我已经有了