Java 步骤文件中实例的正则表达式?
我必须解析来自不同CAD系统的一些STEP文件(ISO-10303-21),它们的结构总是不同的。以下是可能出现的表格:Java 步骤文件中实例的正则表达式?,java,regex,step,Java,Regex,Step,我必须解析来自不同CAD系统的一些STEP文件(ISO-10303-21),它们的结构总是不同的。以下是可能出现的表格: #95=STYLED_ITEM('',(#94),#92); #12 = CARTESIAN_POINT ( 'NONE', ( 1.213489432997839200, 5.617300827691964000, -7.500000000000001800 ) ) ; #263 = TEST ( 'Spaces must not be ignored here' ) ;
#95=STYLED_ITEM('',(#94),#92);
#12 = CARTESIAN_POINT ( 'NONE', ( 1.213489432997839200,
5.617300827691964000, -7.500000000000001800 ) ) ;
#263 = TEST ( 'Spaces must not be ignored here' ) ;
我认为正则表达式会对我有所帮助,所以我创建了这个():
这给了我:
Match 1:
1: #95
2: STYLED_ITEM
3:
Match 2:
1: #12
2: CARTESIAN_POINT
3:
Match 3:
1: #263
2: TEST
3:
因此,前两个小组正在按预期工作。但我也需要像这样的妄想症中的属性:
Match 1:
1: #95
2: STYLED_ITEM
3: ''
4: (#94)
5: #92
Match 2:
1: #12
2: CARTESIAN_POINT
3: 'NONE'
4: ( 1.213489432997839200, 5.617300827691964000, -7.500000000000001800 )
Match 3:
1: #263
2: TEST
3: 'Spaces must not be ignored here'
请帮我找到最后一组的正确表达式(
(.*)
。我认为正则表达式不是这种情况下的解决方法。STEP是一种非常常见的格式,它有解析器。既然您使用的是Java,为什么不看看这个:
我想这就是你使用的格式,对吗
除非考虑整个模式,否则正则表达式肯定会出现问题。即使您设法解释了所有内容,您也只是编写了一种解析器。为什么要重新发明轮子 我不认为正则表达式是这种情况下的发展方向。STEP是一种非常常见的格式,它有解析器。既然您使用的是Java,为什么不看看这个: 我想这就是你使用的格式,对吗
除非考虑整个模式,否则正则表达式肯定会出现问题。即使您设法解释了所有内容,您也只是编写了一种解析器。为什么要重新发明轮子 费尔巴哈,你要的是正则表达式。。。这一个捕获了您想要的五个组 我以自由间距模式格式化了正则表达式,使其更易于阅读。我没有详细解释,但每一行都有注释,我相信您能够理解。:)
费尔巴哈,你要一个正则表达式。。。这一个捕获了您想要的五个组 我以自由间距模式格式化了正则表达式,使其更易于阅读。我没有详细解释,但每一行都有注释,我相信您能够理解。:)
JSDAI拥有AGPL非商业使用许可证,是用于处理STEP文件的免费开源java工具包
BSD许可证,因此始终是免费的开源是生成C++和Python API的STEP代码项目,以及示例性的步骤文件读取器/写入器,它被其他开源项目(如BRL CAD、ScVIEW和OpenVSP)使用。p> www.stepcode.org
opcCaseCad有C++,PythONC有Python,节点OCC具有JavaScript API,用于处理从STEP中翻译的数据,也是免费的和开源的。OCE可以跨更多平台工作,并有更多的bug修复
JSDAI是一个免费的开源java工具包,拥有AGPL许可证,可用于非商业用途,用于处理STEP文件
BSD许可证,因此始终是免费的开源是生成C++和Python API的STEP代码项目,以及示例性的步骤文件读取器/写入器,它被其他开源项目(如BRL CAD、ScVIEW和OpenVSP)使用。p> www.stepcode.org
opcCaseCad有C++,PythONC有Python,节点OCC具有JavaScript API,用于处理从STEP中翻译的数据,也是免费的和开源的。OCE可以跨更多平台工作,并有更多的bug修复
我已经找到了,但如果我是对的,它不是免费的。此外,我没有访问EXPRESS文件的权限。我已经找到了它,但如果我是对的,它不是免费的。此外,我无法访问EXPRESS文件。@feuerball我知道自由间距正则表达式看起来很大,但它只是一个带有大量注释的普通正则表达式。请让我知道这对你是否有效。很抱歉没有回答。我今天很忙。我忘了提到参数的数量是可变的,也就是某个位置的参数类型。我想我应该像其他人建议的那样去图书馆,所以请不要再在正则表达式上浪费时间了。无论如何,非常感谢。@feuerball我知道自由间距正则表达式看起来很大,但它只是一个有很多注释的普通正则表达式。请让我知道这对你是否有效。很抱歉没有回答。我今天很忙。我忘了提到参数的数量是可变的,也就是某个位置的参数类型。我想我应该像其他人建议的那样去图书馆,所以请不要再在正则表达式上浪费时间了。无论如何,非常感谢你。
Match 1:
1: #95
2: STYLED_ITEM
3: ''
4: (#94)
5: #92
Match 2:
1: #12
2: CARTESIAN_POINT
3: 'NONE'
4: ( 1.213489432997839200, 5.617300827691964000, -7.500000000000001800 )
Match 3:
1: #263
2: TEST
3: 'Spaces must not be ignored here'
regexp = /(?x) # free-spacing mode
^ # assert head of string
(\#\d+) # captures the digits into Group 1
\s*=\s* # gets us past the equal and spaces
([A-Z_]+) # captures the name into Group 2
\s*\(\s*' # gets us inside the opening quote
([^']*?)' # captures the string in Group 3
(?: # start optional non-capturing group, let's call it A
\s*,\s* # get over the comma and spaces
(\([^)]*?\)) # capture parens to Group 4
(?:\s*,\s* # start optional non-capturing group, let's call it B
([^\s)]+) # capture last string to Group 5
)? # end optional non-capturing group B
)? # end optional non-capturing group A
\s*\)\s*; # close string
/
subject.scan(regexp) {|result|
# If the regex has capturing groups, subject is an array with the text matched by each group (but without the overall match)
# If the regex has no capturing groups, subject is a string with the overall regex match
}