给定一个字符串(如下面的例子所示),我想将以下内容分为三组:
#
还是#
(如果存在)和方括号(如果[
)在这个阶段,我有以下正则表达式:
/^(#)?(.*?)\[?(.*?)\]?$/
我使用http://gskinner.com/RegExr/作为我的测试工具,打开了多行和全局。
#Sprite[abc]
预期结果
实际结果
#Sprite
预期结果
实际结果
Sprite
预期结果
实际结果
Sprite[abc]
预期结果
实际结果
对我来说,感觉就像上面表达式中的懒惰比赛并不是很懒惰,不应该击中[然后突破,分组并继续前进?
答案 0 :(得分:2)
最好更具体而不是懒惰:)
(#)?([^\[]*)(?:\[([^\]]*)\])?$
适用于您的示例。翻译:
(\#)? # Match # (optional)
([^\[]*) # Match any characters except [
(?: # Try to match...
\[ # [, followed by
([^\]]*) # any characters except ], followed by
\] # ]
)? # optionally
$ # Match end of string.
答案 1 :(得分:1)
我在python中成功使用了以下表达式:
regex = re.compile(r'^(#)?(.*?)(?:\[(.*?)\])?$')
问题基本上是括号后面的问号(?
在.*?
之后使懒惰变得困难)。问号现在是整个表达式,即(?:\[(.*?)\])?
。
注意:(?:)
用于避免捕获表达式(我不知道您使用的工具是否支持该表达式。)
答案 2 :(得分:0)
您可以尝试:
^(#)?([^\[]*)(?:\[(.*?)\])?$