复杂的字符串解析

时间:2012-01-17 05:39:15

标签: java database cjk string-parsing

我正在使用中文数据库处理以这种格式保存条目的文本:

繁体简体[pin1 yin1] /英文等值1 /等效2 /

我尝试使用分隔符(在Java中)解析它。

这是我到目前为止所做的:

                    String delims = "[\\[\\]/]+";
                    String tokens[] = str.split(delims);

问题是英语等价物还包含分隔符标记。

例如:

gu⿔[gui1] /变种龟[龟[gui1] /

有人会如何解析这个字符串?

我正在尝试从字符串中获取以下信息:

简化:⿔

传统:⿔

拼音:gui1

英语等效:龟的变种[龟[gui1]

2 个答案:

答案 0 :(得分:2)

尝试使用正则表达式清理整个字符串。

String text = "⿔ ⿔ [gui1] /variant of 龜|龟[gui1]/";

String pattern =    "(\\S+)\\s*(\\S+)\\s*\\[(.+?)\\]\\s*/(.+?)/";

text = text.replaceAll(pattern, "$1;$2;$3;$4"));

(\\S+) --->
找到连续的非白色空间组

\\s* --->
找到连续的空白区域

\\[(.+?)\\] ---> gui1
找到所有内容 [ bla bla bla ] '?'将匹配最短的答案 例如 [ bla bla ] 而不是 [ bla bla] [ble ble ]

/(.+?)/ ---> variant of 龜|龟[gui1]
与上面相同,但找到 / bla bla / 中的所有内容 '?'将匹配最短的

您可以测试正则表达式here


现在text变为:
⿔;⿔;gui1;variant of 龜|龟[gui1]

接下来,您可以继续使用;作为delims来拆分它们

String tokens[] = text.split(";");

答案 1 :(得分:0)

正则表达式模式稍微复杂一些,因为 CEDICT 中通常有几个定义:

矮小 矮小 [ai3 xiao3] /short and small/low and small/undersized/

所以正则表达式是:

^(\S+)\s+(\S+)\s+\[[^]]+\]\s+(/[^/\r]*){1,19}/$