我正在处理正则表达式,但是我不是它的忠实拥护者,因此我不得不在任务中处理它:(
我已经花了数小时寻找解决方案,但是每次我无法涵盖所有情况时。 我必须编写一个支持以下模式的正则表达式模板:
DYYU-tx-6.7.9.7_6.1.1.0
DYYU-tx-6.7.9.7_60.11.11.09
DYYU-tx-60.70.90.70_6.1.1.0
我觉得这很简单。如果对某人来说这是一个愚蠢的问题,请原谅:(
我尝试了这种模式,但是没有用:
^.*_.*-.*-([0-9]*)\\..*\\..* $
请任何帮助。 我将不胜感激。
答案 0 :(得分:6)
示例中有很多模式,例如,我们可以从以下表达式开始:
^[^-]+-[^-]+-[^_]+_([0-9]+\.){3}[0-9]+$
在this demo的右上角对表达式进行了说明,如果您想探索/简化/修改它,在this link中,您可以观察它如何与某些示例输入步骤匹配一步一步,如果您喜欢。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
final String regex = "^[^-]+-[^-]+-[^_]+_([0-9]+\\.){3}[0-9]+$";
final String string = "DYYU-tx-6.7.9.7_6.1.1.0\n"
+ "DYYU-tx-6.7.9.7_60.11.11.09\n"
+ "DYYU-tx-60.70.90.70_6.1.1.0";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
jex.im可视化正则表达式:
答案 1 :(得分:3)
尝试这个:
^\w+-\w+-(\d+)(\.\d+)+_(\d+\.)+\d+
在Java中最可能是这样的:
"^\\w+-\\w+-(\\d+)(\\.\\d+)+_(\\d+\\.)+\d+"
说明:
^\w+-\w+-
前两部分,例如DYYU-tx-
(\d+)(\.\d+)+_
数字以.
分隔,以_
结尾,例如6.7.9.7_
(\d+\.)+\d+
号与.
分开,例如60.11.11.09
答案 2 :(得分:3)
您的模式不匹配,因为您使用Row day type count prev_count
1 2019-06-08 a 1 0
2 2019-06-09 a 2 0
3 2019-06-10 a 3 1
4 2019-06-07 b 4 0
5 2019-06-09 b 5 4
,它将首先匹配直到字符串的末尾。然后,您匹配一个 @HostListener("click", ["$event"])
click(element) {
console.log(element.className);
this.isOpen = !this.isOpen;
}
,以便它回溯到最后一个下划线,并尝试匹配模式的其余部分。
由于下划线为1,因此您想匹配其后的连字符,但下划线后没有匹配的连字符,因此没有匹配项。
另一种写方法可能是使用negated character class .*
而不是连字符而不是使用_
[^-]
说明
.*
字符串的开头^[^-]+-[^-]+-\d+(?:\.\d+){3}_\d+(?:\.\d+){3} $
匹配除^
以外的其他任何字符1倍以上[^-]+-
与上面相同-
数学1位以上的数字,重复3次以匹配[^-]+-
和1位以上的数字\d+(?:\.\d+){3}
匹配下划线.
数学1位以上的数字,重复3次以匹配_
和1位以上的数字\d+(?:\.\d+){3}
匹配一个空格(为清楚起见,在括号之间表示)并断言字符串的结尾在Java中
.
请注意,在示例数据中,字符串以空格结尾,因此[ ]$
之前有一个空格
答案 3 :(得分:2)
DYYU-tx-(?>\d+[._]?){8}
.
或_
8次。我假设它将始终以DYYU-tx-开头,并且始终是4个数字,并以句点分隔,然后再加上一个下划线,然后再有4个数字,以句点分隔。