我正在使用中文数据库处理以这种格式保存条目的文本:
繁体简体[pin1 yin1] /英文等值1 /等效2 /
我尝试使用分隔符(在Java中)解析它。
这是我到目前为止所做的:
String delims = "[\\[\\]/]+";
String tokens[] = str.split(delims);
问题是英语等价物还包含分隔符标记。
例如:
gu⿔[gui1] /变种龟[龟[gui1] /
有人会如何解析这个字符串?
我正在尝试从字符串中获取以下信息:
简化:⿔
传统:⿔
拼音:gui1
英语等效:龟的变种[龟[gui1]
答案 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}/$