正则表达式匹配多个输入

时间:2011-11-15 14:09:01

标签: regex

我正在尝试为英国式的体重输入做一个智能输入字段,例如“6石和3磅”或“6 st 11磅”,分组捕获2个数字。

现在我得到了:([0-9]{1,2}).*?([0-9]{1,2}).*

问题是它与2组中的“12石头”匹配,1和2而不是12只。是否可以制作在两种情况下都能正确捕获的正则表达式?

7 个答案:

答案 0 :(得分:2)

你需要使第一部分具有占有欲,因此它永远不会被追溯到。

([0-9]{1,2}+).*?([0-9]{1,2})

答案 1 :(得分:2)

因为。匹配包括数字在内的所有内容..试试这个:

/(\d{1,2})\D+(\d{1,2})?/

答案 2 :(得分:1)

这样的东西?

\b(\d+)\b.*?\b(\d+)\b

第1组和第2组将包含您的数字。

说明:

"
\b       # Assert position at a word boundary
(        # Match the regular expression below and capture its match into backreference number 1
   \d       # Match a single digit 0..9
      +        # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
)
\b       # Assert position at a word boundary
.        # Match any single character that is not a line break character
   *?       # Between zero and unlimited times, as few times as possible, expanding as needed (lazy)
\b       # Assert position at a word boundary
(        # Match the regular expression below and capture its match into backreference number 2
   \d       # Match a single digit 0..9
      +        # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
)
\b       # Assert position at a word boundary
"

答案 3 :(得分:0)

这样可行,然后查看捕获组1和3: ([0-9] {1,2})^ 0-9] +(([0-9] {1,2})?+)?

这个想法是制作一个数字和文本的命令,但是制作第二个数字和文本可选。

答案 4 :(得分:0)

以下是我对正则表达式的建议,以匹配您显示的两种变体:

(?<stone>\d+\s(?:stone|st))(?:\s(and)?\s?)(?<pound>\d+\s(?:pound|lb))

答案 5 :(得分:0)

目前有点模糊,这有效:

/([0-9]{1,2})(?:[^0-9]+([0-9]{1,2}).*)?/

获取此数据:

6石和3磅
6 st 11磅 12石
12 st和11lbs

答案 6 :(得分:0)

看到每个人都有所作为,这是我的:

(\d+)(?:\D+(\d+)?)

到目前为止,这绝对是最简洁的。这将匹配一个或两组数字:

"12": ("12", null)
"12st": ("12", null)
"12 st": ("12", null)
"12st 34 lb": ("12", "34")
"cabbage 12st 34 lb": ("12", "34")
"12 potato 34 moo": ("12", "34")

下一步是让它抓住所用单位的名称。

编辑:如上所述,我们不知道您使用的语言,并非所有实现中都提供所有正则表达式功能。但据我所知,\ d表示数字,\ D表示非数字是相当普遍的。