gpt4 book ai didi

java - 用于解析的正则表达式模式

转载 作者:太空宇宙 更新时间:2023-11-04 07:11:47 25 4
gpt4 key购买 nike

我需要一个与以下各项相匹配的模式:

  • 由 (:=#\) 以外的符号组成的非空白字符串,后跟 :,后跟除 (:=#\) 以外的非空白符号的另外一个字符串,或者
  • 空格或制表符后跟 1 个或多个非空白字符 OR
  • # 后跟任何内容或
  • 由一个或多个空格或制表符组成的一行或
  • 对以前未捕获的事物的包罗万象。

我目前的模式如下:^([\\S&&[^\\n:=#\\\\]]+):([[\\s&&[^\\n]][\\S&&[^\\n=:#\\\\]]*]*)|^[\\t](\\S[\\s\\S&&[^\\n]]*)|(^#[\\s\\S&&[^\n]]+)|^([\\s&&[^\\n\\x0B\\f\\r] ]+)|([[\\s\\S]&&[^\\n]]+)

我使用 findwithinhorizo​​n(this Pattern, 0) 与扫描仪一起使用它

在下面的 block 中,inp 是缓冲的扫描器,_pat 是上面的模式。我遇到了将字符串分配给错误的匹配组的问题。

例如:

bob: cat dog
meow

在此扫描仪中运行此命令后,在匹配组 2(“猫狗”)上调用 .split(\\s+) 后,我得到一个空字符串,并且“meow”与组 6(我的错误组)而不是组 3 匹配。

    BufferedReader buf =
new BufferedReader(new FileReader(makeFile));
Scanner inp = new Scanner(buf);


while (inp.findWithinHorizon(_pat, 0) != null) {
int i = 1;
MatchResult mat = inp.match();
for (; i <= TOTAL_VALS; i++) {
if (mat.group(i) != null) {
break;
}
}

最佳答案

此正则表达式会将一行解析为适当的组:

([^\s:=#\\]+\s*:\s*(?:[^\s:=#\\]+\s*))|([ \t]\S+)|(#.*)|(\s*)|(.*)

Regular expression visualization

请注意,您的第一个条件实际上与 bob: cat dogs 不匹配。条件应该类似于:

  • :=#\ 以外的非空白符号字符串,可选后跟空格,后跟 :(可选后跟空格),后跟除 (:=#) 之外的一个以空格分隔的非空白符号字符串 OR
<小时/>

使用示例:

String regex = "([^\\s:=#\\\\]+\\s*:\\s*(?:[^\\s:=#\\\\]+\\s*)+)|([ \t]\\S+)|(#.*)|(\\s*)|(.*)";
Pattern p = Pattern.compile(regex);
for (String line : lines) {
Matcher m = p.matcher(line);
m.matches();
for(int i=1;i<m.groupCount();i++) {
System.out.println(i+": "+m.group(i));
}
System.out.println();
}

对于您的输入数据:

bob: cat dog
meow

输出将是

1: bob: cat dog
2: null
3: null
4: null

1: null
2: meow
3: null
4: null

关于java - 用于解析的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20549643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com