1

在 Notepad++ 中使用正则表达式并查找与以下两个数据示例中的模式匹配的数据行,除了我提供的表达式之外,我还可以使用更短或更有效的表达式吗?

上升 0640 设置 1933 (:) 12h 52m 58s - 2m 06s 106

上升 0640 设置 1931 (:) 12h 50m 51s - 2m 07s 106

上升 [0-9][0-9][0-9][0-9] 设置 [0-9][0-9][0-9][0-9] (:) [0-9] [0-9]h [0-9][0-9]m [0-9][0-9]s - [0-9]m [0-9][0-9]s [0-9 ][0-9][0-9]

4

4 回答 4

2

您可以继续从您提供的原始正则表达式中缩短它。

这是第一次压缩:

rise \d{4}\sset\s\d{4}\s\(:\)\s\d{2}h\s\d{2}m\s\d{2}s\s-\s\dm\s\d{1,}s\s\d{1,}

我知道这可以进一步缩短,但为了解释:

\d{4} --- Matches 4 digits
\s    --- Matches space
\d{2}[h,m,s]+ --- Matches 2digits followed by h, m, s
\d{1,} --- matches one or more of the digit pattern 

由于 Notepad++ 不支持 \d{4}

rise \d+\sset\s\d+\s\(:\)\s[\d,\s,h,m,s]+-\s\dm\s\d+s\s\d+
于 2012-06-23T05:27:51.407 回答
2

如果它类似于常规正则表达式,那么这里有一个与您的正则表达式等效的较短版本:rise \d{4} set \d{4} \(:\) \d\dh \d\dm \d\ds - \dm \d\ds \d{3} 您忘记转义括号。

您可以在这个非常方便的网站上测试各种正则表达式模式

当然,它可以缩短,但你很可能会受到准确性的影响,如果你有很多数据,你可能会得到误报。为简洁而失去准确性的快速示例是rise \d{4} set \d{4} \(:\) [0-9hms -]+? \d{3}.

这取决于您的数据集以及是否要牺牲可读性。[a-z0-9 ]+? \(:\) [0-9hms -]+? \d{3} 尽管您确实在允许的范围内推动它,但这仍然匹配。

决定权在你。

于 2012-06-23T05:27:58.703 回答
1

我不使用记事本++,但假设它使用正确的正则表达式,这有效:

rise \d{4} set \d{4} \(:\) \d{2}h \d{2}m \d{2}s - \dm \d{2}s \d{3}

不过,您实际上并不需要匹配“(:)”,所以这会更简单一些:

rise \d{4} set \d{4}.*\d{2}h \d{2}m \d{2}s - \dm \d{2}s \d{3}

或者,如果您想捕获匹配的数字以进行反向引用(\1、\2 等),请在数字周围使用括号:

rise (\d{4}) set (\d{4}).*(\d{2})h (\d{2})m (\d{2})s - (\d)m (\d{2})s (\d{3})

如果你真的信任你的数据,你可以用“*”接受任意数量的数字:

rise (\d*) set (\d*) .* (\d*)h (\d*)m (\d*)s - (\d*)m (\d*)s (\d*)

(请注意,在最后一个示例中,我将空格放回“。”,否则“。 ”将匹配直到“h”的数字。)

于 2012-06-23T05:30:31.513 回答
0

感谢所有的反馈,我知道我要求一种更短或更有效的方式来编写代码,但是在使用它之后,我真正想要的是一个可以处理单位数和两位数时间单位的表达式。所以下面是我想出的,它适用于我提供的数据,但再次......谢谢!

上升\s[0-9]+\sset\s[0-9]+\s\(\:\)\s[0-9]+h\s[0-9]+m\s[0- 9]+s\s-\s[0-9]+m\s[0-9]+s\s[0-9]+

上升 0640 设置 1933 (:) 12h 52m 58s - 2m 06s 106

上升 640 集 1931 (:) 12h 50m 1s - 2m 07s 3

上升 0640 设置 1931 (:) 12h 50m 51s - 2m 07s 99

上升 0640 设置 1931 (:) 12h 9m 51s - 2m 07s 106

上升 0640 设置 931 (:) 9h 50m 51s - 2m 07s 106

于 2012-06-24T06:55:46.420 回答