正则表达式模式编号后跟一个字符

时间:2012-05-28 14:14:42

标签: c# regex

我正在尝试将Regex用于以下方案,但遇到了一些麻烦。以下是场景。

我的字符串如下所示:

"The office timing (h) is from 8h to 18h."

从上面的字符串中我需要"8h""18h"

到目前为止,我已经完成了"[0-9]*[h]"。但这会给我"h""8h""18h"

那里有专家的想法吗?

5 个答案:

答案 0 :(得分:9)

[0-9]*[h]替换为[0-9]+h

+表示必须出现一次或多次。将h括起来是没有用的,因为它是独立的。

您还可以使用\d+h提高可读性(\d匹配任何数字)。

答案 1 :(得分:2)

*表示正则表达式中重复次数为零或更多次。请改为指定重复的正确数字。

"\b\d{1,2}h\b"

\d代表一位数。

{1,2}表示一次或两次重复(\d)。

\b表示单词的开头或结尾(因为在模式之前或之后不得有字母或数字)。

找不到"h""123h""18hertz"

答案 2 :(得分:1)

您可以使用此正则表达式:

\b\d+h\b

答案 3 :(得分:1)

用+(加号)代替*,即

[0-9] + [H]

在正则表达式中说:

*表示匹配任意数量的先前令牌(包括零)

+表示匹配任意数量的先前令牌(至少一个)

此外,h周围的方括号是多余的,因为您只匹配单个字符。

答案 4 :(得分:-2)

即使这样也会有所帮助:[0-9][0-9]*h相当于[0-9]+h