java中的正则表达式

时间:2011-02-03 11:02:28

标签: java regex tokenize string-split

我有一个问题,我需要对我的字符串进行标记(使用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中表达正则表达式的方式是否存在问题?

3 个答案:

答案 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)

String.split返回字符串的数组

使split_text成为一个数组:

String[] split_text = ...
      ^^

答案 2 :(得分:0)

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

  • 空格在正则表达式中是重要的,所以不要在正则表达式中将空格放在字符串中不期望它们的位置。
  • 使用\.匹配文字点。
  • (\d{3},)*\d{3}([.]\\d)*将与123,456,789.1.1.1.1匹配,但不会与1,234.67匹配。这真的是你的意图吗?
  • <number> x <number>只匹配数字对,而不是示例中的三元组。

我认为最好稍微更新一下您的规格。 完全你想要匹配什么?举几个例子。想想角落的情况(是允许的前导零吗?可以像.12一样删除吗?1.4E-45等等......)