2011-02-03 88 views
0

我有一个问题,我需要标记我的字符串(使用java代码),以便它被分成一个字符串数组。此阵列中的每个令牌应该是我尝试作为实现代码字,数字或形式(23×34 X 56,等等)的尺寸:正则表达式java

String[] split_text = text.split("\\s | (\\d{3},)*\\d{3}([.]\\d)* x (\\d{3},)*\\d{3}([.]\\d)* | \\d*([.]\\d)* x \\d*([.]\\d)*"); 

但是,这是给一个语法错误。任何人都可以告诉我如何使用正则表达式来做到这一点,以及在java中表达正则表达式的方式是否存在问题?

+0

你也可以发布样本输入和期望的输出。 – 2011-02-03 11:06:04

+2

只是一个提示:粘贴你的正则表达式在http://www.strfriend.com/图形化可视化。不时帮助我很多。 – 2011-02-03 11:08:04

+1

@Rodrigo:那个链接非常棒, +1 – 2011-02-03 11:12:14

回答

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 - 一个伟大的网站进行测试。

您可能想要用\p{L}替换\w以覆盖java中的所有Unicode字。

0

String.split返回字符串的数组

split_text数组:

String[] split_text = ... 
     ^^ 
+0

对不起,错字较早... split_text是一个数组。 – assassin 2011-02-03 11:10:44

0

我没有看到一个语法错误在你的正则表达式,但也存在一些问题:

  • 空白在正则表达式显著,所以不要在正则表达式中将空格放在字符串中。
  • 使用\.来匹配文字点。
  • (\d{3},)*\d{3}([.]\\d)*将匹配123,456,789.1.1.1.1而不是1,234.67。这真的是你想要的吗?
  • <number> x <number>只会匹配成对的数字,而不是像你的例子中的三元组。

我认为最好是稍微更新规格。什么究竟是你/你不想匹配。举几个例子。考虑角落案例(是否允许前导零?可以丢弃,如.12?等等如何)...