我正在尝试将Regex用于以下方案,但遇到了一些麻烦。以下是场景。
我的字符串如下所示:
"The office timing (h) is from 8h to 18h."
从上面的字符串中我需要"8h"
和"18h"
。
到目前为止,我已经完成了"[0-9]*[h]"
。但这会给我"h"
,"8h"
和"18h"
。
那里有专家的想法吗?
答案 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