Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 步骤文件中实例的正则表达式?_Java_Regex_Step - Fatal编程技术网

Java 步骤文件中实例的正则表达式?

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' ) ;

我必须解析来自不同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' ) ;
我认为正则表达式会对我有所帮助,所以我创建了这个():

这给了我:

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
}