我有this regex试图找到单独的STEP行并将其划分为三个参考号,类和属性:
#14=IFCEXTRUDEDAREASOLID(#28326,#17,#9,3657.6);
变为
[['14'], ['IFCEXTRUDEDAREASOLID'], ['#28326,#17,#9,3657.6']]
有时这些行有任意换行符,特别是在属性中,所以我在正则表达式中放了一些\ s。然而,这会产生一个有趣的错误。该模式现在将两行匹配到每个匹配中。
如何将正则表达式调整为仅捕获一行,即使它们有换行符?只是为了好奇,为什么它会在第二行之后停止而不会持续到最后一行?
答案 0 :(得分:2)
您现在每次匹配2行的原因是\s
匹配任何空格,如果匹配行后有换行符,\s*
将全部抓取它们。
使用
/^#(\d+)\s*=\s*([a-zA-Z0-9]+)\s*\(((?:'[^']*'|[^;'])+)\);/gm
<强>详情:
^
- 开始行#
- 哈希符号(\d+)
- 第1组:一个或多个数字\s*=\s*
- 包含可选空格的=
([a-zA-Z0-9]+)
- 第2组捕获1个以上的字母数字\s*\(
- 0+空格和(
((?:'[^']*'|[^;'])+)
- 第3组捕获'...'
个子串('[^']*'
,内部不允许'
)或(|
)1个以外的字符{ {1}}和;
('
)[^;']+
- \);
序列否定字符类解决方案suggested by Maverick_Mrt适用于特定情况,但一旦使用);
捕获的文本包含否定字符,匹配将失败。
答案 1 :(得分:1)