【发布时间】:2017-02-22 21:25:24
【问题描述】:
我正在尝试用 Java 编写一个正则表达式,它可以获取所有两位数(两位数不能以 0 开头)并且它的前后没有字符。
例如,我想匹配以下字符串中的数字 30:
- character30 wordstart
- wordstart 30 个字符
- 数字 30 在这里
但不想上以下:
- 字符30字符
- 3000
我正在尝试使用环视来完成此任务,到目前为止我最接近的是:
(?<!\w)(1[2-9]|[2-9][0-9])(?!([\w]))
两位数不能以 0 开头,我不想匹配三位数中的两位数。
【问题讨论】:
-
让我们知道它是否有效。像这样的问题可以有不同的回答。如果您至少在单词边界之一处需要空格,则需要
(?<!\S)\d{2}(?!\d)|(?<!\d)\d{2}(?!\S)。 -
另一个想法是匹配字母内的两个数字序列并捕获其他的:
\p{L}\d{2}\p{L}|(?<!\d)\d{2}(?!\d) -
嘿 Wiktor,还有几个条件我忘了提,因为两位数不能以 0 开头,我不想在三位数中匹配两位数。但是,您的第二个答案给了我足够的基础来创建我正在寻找的正则表达式
标签: java regex regex-lookarounds