java 通过贪婪量词表达式拆分的回顾
java lookbehind for split by greedy quantifiers expressions
我写了下面的表达式来在每个 x 单词(例如 3)后跟一个 space 之后拆分一个字符串。我的问题是我需要保留全部内容。但是我在 Java.
中找不到使用后视等方法来完成此操作的方法
有人有这方面的经验吗?
String text = "Hello my name is Tom and i love playing football";
String regex = "([a-zA-Z0-9öÖäÄüÜß]+\s){" + ngramm_length + "}";
System.out.println(regex);
String[] ngramms = text.split(regex);
结果是4个token,只有最后一个还包含内容,我想得到:
1: Hello my name 2: is Tom and 3: i love playing 4: football
查看 link JAVA 代码中的匹配信息框:
public static void main(String[] args) throws IOException {
int length = 3; //2
String dynamic_length = "";
for (int i = 1; i < length; i++) {
dynamic_length += i;
if (i + 1 < length) {
dynamic_length += ",";
}
}
final String regex = "([a-zA-Z0-9öÖäÄüÜß]+\s){" + length + "}|([a-zA-Z0-9öÖäÄüÜß]+\s){" + dynamic_length + "}";
final String string = "Hello my name is Tom and i love playing football\n\n";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
int count = 0;
while (matcher.find()) {
++count;
System.out.println("match:" + count + " " + matcher.group(0));
}
它不是动态的,因为它只适用于 2 和 3 的长度。这是我的问题还是我错过了什么?
对于 x > 1 我可以使用:
final String regex = "([a-zA-Z0-9öÖäÄüÜß]+\s){" + length + "}|([a-zA-Z0-9öÖäÄüÜß]+\s){1," + (length - 1) + "}";
对于 x = 1 我可以使用:
final String regex = "([a-zA-Z0-9öÖäÄüÜß]+\s){" + length + "}|([a-zA-Z0-9öÖäÄüÜß]+\s){1}";
或者只是拆分 space。
感谢Maverick_Mrt!!!
你可以试试这个:
([a-zA-Z0-9öÖäÄüÜß]+\s){3}|([a-zA-Z0-9öÖäÄüÜß]+\s){1,2}
查看 link 中的匹配信息框
JAVA代码:
public static void main(String[] args) {
final String regex = "([a-zA-Z0-9öÖäÄüÜß]+\s){3}|([a-zA-Z0-9öÖäÄüÜß]+\s){1,2}";
final String string = "Hello my name is Tom and i love playing football\n\n";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
int count = 0;
while (matcher.find()) {
++count;
System.out.println("match:" + count + " " + matcher.group(0));
}
根据您的评论:
如果你想要每场比赛 n 块那么你就这样做,确保 n>0
([a-zA-Z0-9öÖäÄüÜß]+\s){n}|([a-zA-Z0-9öÖäÄüÜß]+\s){1,n-1}
Sample output
match:1 Hello my name
match:2 is Tom and
match:3 i love playing
match:4 football
我写了下面的表达式来在每个 x 单词(例如 3)后跟一个 space 之后拆分一个字符串。我的问题是我需要保留全部内容。但是我在 Java.
中找不到使用后视等方法来完成此操作的方法有人有这方面的经验吗?
String text = "Hello my name is Tom and i love playing football";
String regex = "([a-zA-Z0-9öÖäÄüÜß]+\s){" + ngramm_length + "}";
System.out.println(regex);
String[] ngramms = text.split(regex);
结果是4个token,只有最后一个还包含内容,我想得到:
1: Hello my name 2: is Tom and 3: i love playing 4: football
查看 link JAVA 代码中的匹配信息框:
public static void main(String[] args) throws IOException {
int length = 3; //2
String dynamic_length = "";
for (int i = 1; i < length; i++) {
dynamic_length += i;
if (i + 1 < length) {
dynamic_length += ",";
}
}
final String regex = "([a-zA-Z0-9öÖäÄüÜß]+\s){" + length + "}|([a-zA-Z0-9öÖäÄüÜß]+\s){" + dynamic_length + "}";
final String string = "Hello my name is Tom and i love playing football\n\n";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
int count = 0;
while (matcher.find()) {
++count;
System.out.println("match:" + count + " " + matcher.group(0));
}
它不是动态的,因为它只适用于 2 和 3 的长度。这是我的问题还是我错过了什么?
对于 x > 1 我可以使用:
final String regex = "([a-zA-Z0-9öÖäÄüÜß]+\s){" + length + "}|([a-zA-Z0-9öÖäÄüÜß]+\s){1," + (length - 1) + "}";
对于 x = 1 我可以使用:
final String regex = "([a-zA-Z0-9öÖäÄüÜß]+\s){" + length + "}|([a-zA-Z0-9öÖäÄüÜß]+\s){1}";
或者只是拆分 space。
感谢Maverick_Mrt!!!
你可以试试这个:
([a-zA-Z0-9öÖäÄüÜß]+\s){3}|([a-zA-Z0-9öÖäÄüÜß]+\s){1,2}
查看 link 中的匹配信息框 JAVA代码:
public static void main(String[] args) {
final String regex = "([a-zA-Z0-9öÖäÄüÜß]+\s){3}|([a-zA-Z0-9öÖäÄüÜß]+\s){1,2}";
final String string = "Hello my name is Tom and i love playing football\n\n";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
int count = 0;
while (matcher.find()) {
++count;
System.out.println("match:" + count + " " + matcher.group(0));
}
根据您的评论:
如果你想要每场比赛 n 块那么你就这样做,确保 n>0
([a-zA-Z0-9öÖäÄüÜß]+\s){n}|([a-zA-Z0-9öÖäÄüÜß]+\s){1,n-1}
Sample output
match:1 Hello my name
match:2 is Tom and
match:3 i love playing
match:4 football