借助正则表达式,可以通过一条转换规则实现多个对象的转换,例如整个 IPE 型钢系列的批量转换。
示例
例如,将 Tekla 中的 IPE120 转换为 RFEM 6 中的 IPE 120 | Euronorm 19-57; ... | SZS 后,该转换规则同样应适用于 IPE 型钢系列中的其他所有截面。
要为整个 IPE 型钢系列创建转换规则,需要按以下方式编写正则表达式:
| Tekla 到 RFEM 6 的转换 | Tekla | RFEM 6 |
| 正则表达式 | IPE(\d+) | IPE $1 | Euronorm 19-57; ... | SZS |
| 截面名称 | IPE120 | IPE 120 | Euronorm 19-57; ... | SZS |
| 截面名称 | IPE300 | IPE 300 | Euronorm 19-57; ... | SZS |
表达式 (\d+) 可匹配任意整数(例如 IPE200、IPE300……)。
$1 用于引用所匹配到的数字。如下图所示,该正则表达式已被添加到 Tekla 转换表中。
当正则表达式中包含两个数字匹配项时,表达式 $1 用于引用第一个匹配值,$2 用于引用第二个匹配值。下表通过材料转换示例展示了这一用法。
| Tekla 到 RFEM 6 的转换 | Tekla | RFEM 6 |
| 正则表达式 | C(\d+)/(\d+) | C$1/$2 | EN 1992-1-1:2004/A1:2014 |
| 材料名称 | C20/25 | C20/25 | EN 1992-1-1:2004/A1:2014 |
| 材料名称 | C30/37 | C30/37 | EN 1992-1-1:2004/A1:2014 |
下面将展示并解释在定义正则表达式时可能出现的问题。
截面名称 400*400 无法通过表达式 (\d+)*(\d+) 完成转换
正则表达式中的星号 * 是一个具有特殊功能的元字符,因此系统不会将其识别为普通的星号字符。若要将星号作为普通字符使用,需要使用反斜杠 \ 对其进行转义,以取消其特殊含义。
| Tekla 到 RFEM 6 的转换 | Tekla | RFEM 6 |
| 正则表达式 | (\d+)\*(\d+) | R_M1 $2/$1 |
| 截面名称 | 400*400 | R_M1 400/400 |
| 截面名称 | 150*200 | R_M1 150/200 |
使用表达式 RHS(\d+)*(\d+)*(\d+) 无法转换截面名称 RHS200*100*5。
当使用多个相似的正则表达式时,可能会导致系统应用了错误的正则表达式(如下图示例)。
使用脱字符 ^ 可以限定:正则表达式只有在匹配材料或截面名称的起始位置时才会生效。这样一来,表达式 ^(\d+)\*(\d+) 对 RHS 截面就不再适用,因为 RHS 类型的截面名称不是以数字开头的(例如 400x400 这样的名称才以数字开头)。
| Tekla 到 RFEM 6 的转换 | Tekla | RFEM 6 |
| 正则表达式 | ^(\d+)\*(\d+) | R_M1 $2/$1 |
| 截面名称 | 400*400 | R_M1 400/400 |
| 截面名称 | 300*300 | R_M1 300/300 |
| 正则表达式 | RHS(\d+)\*(\d+)\*(\d+) | RRO $1x$2x$3 | EN 10219-2 | ALUKÖNIGSTAHL |
| 截面名称 | RHS200*100*5 | RRO 200x100x5 | EN 10219-2 | ALUKÖNIGSTAHL |
| 截面名称 | RHS180*140*8 | RRO 180x140x8 | EN 10219-2 | ALUKÖNIGSTAHL |
如何独立于规范名称将 RFEM 6 中的材料/截面转换出来?
与 RFEM 6 不同,Revit 和 Tekla 对材料和截面的命名方式不依赖于任何规范。例如为了能够将来自不同规范的 HEA 300 截面,在 Revit 或 Tekla 中统一转换为一个不带规范指定的 HEA 300,可以使用正则表达式 .*$ 来忽略名称中的规范名称部分。
| RFEM 6 到 Tekla 的转换 | RFEM 6 | Tekla |
| 正则表达式 | HEA (\d+).*$ | HEA$1 |
| 截面名称 | HEA 300 | DIN 1025-3:1994-03 | Ferona | HEA300 |
| 截面名称 | HEA 300 | Euronorm 53-62; ... | SZS | HEA300 |
| 截面名称 | HEA 300 | GB/T 11263-2017 | -- | HEA300 |
等边与不等边角钢的正则表达式无法同时正常工作。
当使用结构相似的多个正则表达式时,可能会出现系统始终匹配转换表中第一个表达式的情况(如图所示)。在不等边角钢(红色)的转换中,错误应用了等边角钢(黄色)的正则表达式,因为这两个表达式的结构从头到尾都高度相似,导致系统无法区分。
为了区分这些相似的正则表达式,需要在容易被错误匹配的表达式前添加 ^,并在末尾添加 $。通过这种方式,可以限定正则表达式仅在截面名称从首字符到末字符均与该模式完全匹配时才生效。下面通过一个表格示例来说明这一方法:
| Tekla 到 RFEM 6 的转换 | Tekla | RFEM 6 |
| 正则表达式 | ^L(\d+)\*(\d+)$ | L $1x$1x$2 | DIN EN 10056-1:1998-10 | -- |
| 截面名称 | L40*4 | L 40x40x4 | | DIN EN 10056-1:1998-10 | -- |
| 正则表达式 | L(\d+)\*(\d+)\*(\d+) | L $1x$2x$3 | EN 10056-1:2017 | ArcelorMittal (2018) |
| 截面名称 | L100*65*10 | L 100x65x10 | EN 10056-1:2017 | ArcelorMittal (2018) |
在 RFEM 中,等边和不等边角钢的截面名称均由三个数值定义。而Tekla对等边角钢的截面名称仅使用两个数值。如何同时兼顾这两种情况?
首先,可以为不等边角钢创建包含三个数值的正则表达式:
| RFEM 6 到 Tekla 的转换 | RFEM 6 | Tekla |
| 正则表达式 | L (\d+)x(\d+)x(\d+).*$ | L$1*$2*$3 |
| 截面名称 | L 100x75x8 | L100*75*8 |
对于等边角钢,正则表达式定义如下:
| RFEM 6 到 Tekla 的转换 | RFEM 6 | Tekla |
| 正则表达式 | L (\d+)x(\1)x(\d+).*$ | L$1*$3 |
| 截面名称 | L 100x100x8 | L100*8 |
(\d+) 捕获第一个数字。
(\1) 检查第二个数字是否与第一个数字相同。如果相同,则匹配该正则表达式。
(\d+) 捕获第三个数字。
如何转换带小数的截面名称?
RFEM 中有一些截面系列,其截面名称中包含以小数表示的尺寸(例如 CHS 圆形空心型钢)。以下示例说明如何使用一个正则表达式完成这些截面的转换:
- CHS 25x2 | EN 10219-2 | Condesa(截面名称由两个整数组成)
- CHS 26.9x2 | EN 10219-2 | Condesa(截面名称由一个小数和一个整数组成)
- CHS 32x2.9 | EN 10219-2 | Condesa(截面名称由一个整数和一个小数组成)
- CHS 37.5x2.9 | EN 10219-2 | Condesa(截面名称由两个小数组成)
因此,每个数字都可以选择包含一位小数位。该转换规则的正则表达式按以下方式构建:
CHS (\d*\.?\d*)x(\d*\.?\d*).*$
\d* 匹配零个或一个数字。
\.? 可选地匹配小数点,因此也支持不带小数点的整数。
\d* 匹配小数点后的零个或一个数字。
.*$ 用于忽略截面名称中的规范名称部分。
| RFEM 6 到 Tekla 的转换 | RFEM 6 | Tekla |
| 正则表达式 | CHS (\d*\.?\d*)x(\d*\.?\d*).*$ | RO$1*$2 |
| 截面名称 | CHS 25x2 | EN 10219-2 | Condesa | RO25*2 |
| 截面名称 | CHS 26.9x2 | EN 10219-2 | Condesa | RO26.9*2 |
| 截面名称 | CHS 32x2.9 | EN 10219-2 | Condesa | RO32*2.9 |
| 截面名称 | CHS 37.5x2.9 | EN 10219-2 | Condesa | RO37.5*2.9 |
为什么截面 KREIS_M1 500 没有被转换?
对于少数几个截面,由于 Web 服务的原因,用于转换的名称与所显示的德语名称有所不同。
KREIS_M1 500 的转换必须定义为 CIRCLE_M1 500。
以下截面名称同样适用此规则:
- KREIS→CIRCLE
- RRO→RHS
- QRO→SHS
- KHP→CHS
- Kabel→Cable