正则表达式 - 从开始匹配最少量的文本

时间:2017-01-17 17:18:40

标签: regex

我现在确定如何最好地提出问题,但我相信一个例子会让它完全清楚。

当前正常演出

(?:kg)~

表示匹配字符串以“weight”(可选)开头,后跟1或2位数字,后跟“k”或“kg”。

有没有办法在没有OR(k | kg)的情况下写出表达式的最后部分? 我更喜欢它是否像

(?:mmhg)~

其中〜表示匹配此文本或作为其子集的文本,即“k”。另一个例子是

(?:m|mm|mmh|mmhg)

最后会匹配“m”,“mm”,“mmh”或“mmhg”。

显然我完全编写了“〜”符号

更新

我正在生成这些表达式,所以我绝对可以做一些事情,比如把文本分成单独的字符并构建一个“|”列表如下,但我不愿意。

let pathLayer = CAShapeLayer()
pathLayer.strokeColor = UIColor.blue.cgColor
pathLayer.lineWidth = 3.0
pathLayer.fillColor = UIColor.clear.cgColor
pathLayer.lineDashPattern = [5.0, 2.0]
pathLayer.lineDashPhase = 0

let path = PathCreator.createPath(resultPoints)

pathLayer.path = path.cgPath

2 个答案:

答案 0 :(得分:0)

您可以使用:

^(?:weight\s?)?(\d{1,2})kg?$

kg?匹配kkg

的位置

RegEx Demo

对于第二部分,您可以使用:

\bm(?:m(?:hg?)?)?\b

这将匹配mmmmmhmmhg

RegEx Demo 2

答案 1 :(得分:0)

你可以做什么,因为它似乎并不是一个你正在寻找的单位,如下所示:

^(?:weight\s?)?(\d{1,2})(?:\w+?)$

在1或2位数之后,这将匹配由字母组成的任何内容。但是,它不允许您将其与有效值进行比较。所以我会建议反对。虽然如果你最后捕获第二个括号(\w+?)$,你可以很容易地对捕获后的第二个值进行测试,并根据第二个括号值处理第一个括号的数据。