0

我有一个问题,我需要标记我的字符串(使用 java 代码),以便将它拆分为一个字符串数组。这个数组中的每个标记都应该是一个单词、数字或表单的维度(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 中表达正则表达式的方式是否存在问题?

4

3 回答 3

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 单词。

于 2011-02-03T12:02:50.193 回答
0

String.split返回一个字符串数组

split_text一个数组:

String[] split_text = ...
      ^^
于 2011-02-03T11:08:28.987 回答
0

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

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

我认为最好稍微更新一下规格。你到底想/不想匹配什么。举几个例子。想想极端情况(是否允许前导零?可以像这样丢弃它.12吗?怎么样1.4E-45等等)......

于 2011-02-03T11:09:23.997 回答