正则表达式在第一场比赛中包含两场比赛

时间:2017-01-18 09:18:12

标签: regex step ifc

我有this regex试图找到单独的STEP行并将其划分为三个参考号,类和属性:

#14=IFCEXTRUDEDAREASOLID(#28326,#17,#9,3657.6);

变为

[['14'], ['IFCEXTRUDEDAREASOLID'], ['#28326,#17,#9,3657.6']]

有时这些行有任意换行符,特别是在属性中,所以我在正则表达式中放了一些\ s。然而,这会产生一个有趣的错误。该模式现在将两行匹配到每个匹配中。

如何将正则表达式调整为仅捕获一行,即使它们有换行符?只是为了好奇,为什么它会在第二行之后停止而不会持续到最后一行?

2 个答案:

答案 0 :(得分:2)

您现在每次匹配2行的原因是\s匹配任何空格,如果匹配行后有换行符,\s*将全部抓取它们。

使用

/^#(\d+)\s*=\s*([a-zA-Z0-9]+)\s*\(((?:'[^']*'|[^;'])+)\);/gm

请参阅this regex demo

<强>详情:

  • ^ - 开始行
  • # - 哈希符号
  • (\d+) - 第1组:一个或多个数字
  • \s*=\s* - 包含可选空格的=
  • ([a-zA-Z0-9]+) - 第2组捕获1个以上的字母数字
  • \s*\( - 0+空格和(
  • ((?:'[^']*'|[^;'])+) - 第3组捕获'...'个子串('[^']*',内部不允许')或(|)1个以外的字符{ {1}}和;'
  • [^;']+ - \);序列

否定字符类解决方案suggested by Maverick_Mrt适用于特定情况,但一旦使用);捕获的文本包含否定字符,匹配将失败。

答案 1 :(得分:1)

你可以试试这个:

SimpleDateFormat

Your updated link