我有一个问题,我需要对我的字符串进行标记(使用java代码),以便将其拆分为String数组。此数组中的每个标记应该是表单的单词,数字或尺寸(23 x 34 x 56等)我试图将其编码为:
String[] split_text = text.split("\\s | (\\d{3},)*\\d{3}([.]\\d)* x (\\d{3},)*\\d{3}([.]\\d)* | \\d*([.]\\d)* x \\d*([.]\\d)*");
但是,这会产生语法错误。任何人都可以告诉我如何使用正则表达式,以及我在java中表达正则表达式的方式是否存在问题?
答案 0 :(得分:1)
要将任意一对数字与点或逗号以及中间的x匹配,您可以执行以下操作:
(\d*(?:[.,]\d+)* x \d*(?:[.,]\d+)*)
或成对和三元组:
(\d*(?:[.,]\d+)*(?: x \d*(?:[.,]\d+)*){1,2})
所以也许这就是你的表达:
((?:\d*(?:[.,]\d+)*(?: x \d*(?:[.,]\d+)*){1,2})|\s|\w+)
请参阅此处:http://rubular.com/r/snAiI7GMT7 - 一个很棒的测试网站。
您可能希望将\w
替换为\p{L}
以涵盖java中的所有unicode字。
答案 1 :(得分:0)
答案 2 :(得分:0)
我没有在你的正则表达式中看到语法错误,但是有一些问题:
\.
匹配文字点。(\d{3},)*\d{3}([.]\\d)*
将与123,456,789.1.1.1.1
匹配,但不会与1,234.67
匹配。这真的是你的意图吗?<number> x <number>
只匹配数字对,而不是示例中的三元组。我认为最好稍微更新一下您的规格。 完全你想要匹配什么?举几个例子。想想角落的情况(是允许的前导零吗?可以像.12
一样删除吗?1.4E-45
等等......)