【发布时间】:2017-01-18 09:18:11
【问题描述】:
我有this regex,它试图找到单独的 STEP 行并将其分为参考号、类和属性的三个组:
#14=IFCEXTRUDEDAREASOLID(#28326,#17,#9,3657.6);
变成
[['14'], ['IFCEXTRUDEDAREASOLID'], ['#28326,#17,#9,3657.6']]
有时这些行有任意换行符,尤其是在属性之间,所以我在正则表达式中放了一些 \s。然而,这导致了一个有趣的错误。该模式现在将两行匹配到每个匹配项中。
如何调整正则表达式以仅捕获一行,即使它们有换行符?只是为了好奇,为什么它会在第二行之后停止,而不是一直持续到最后一行?
【问题讨论】:
-
在我看来您想使用类似
#(\d+)\s*=\s*([a-zA-Z0-9]+)\s*\(([\s\S]*?)\);的东西。或^#(\d+)\s*=\s*([a-zA-Z0-9]+)\s*\(([\s\S]*?)\);$(带有多行选项)。 -
@WiktorStribiżew 非常感谢!这似乎有效。添加答案,我会接受它是正确的。速度加分:)
-
是的,当然,我会添加解释。
-
我认为使用 \S 有点矫枉过正
-
@Maverick_Mrt:这不是“矫枉过正”,
[\s\S]*?/(?s:.*?)是匹配未知字符串直到第一次出现多字符分隔符的正确方法(之一)。有一种方法可以通过展开它来提高效率,但通常情况下,人们在看到量化组内的前瞻时会感到害怕。