背景是这样的。 有这样格式的原始文本:
Question 1:
XXXXXXXXXXXXXXXXXXXX
Response 1:
YYYYYYYYYYYYYYYYYYYY
Question 2:
XXXXXXXXXXXXXXXXXXXX
Response 2:
YYYYYYYYYYYYYYYYYYYY
........
现在想用java程序抽取出一对对的Question-Answer对。我自己先弄了个糙快猛的做法,没用regex,主要就是用apache common包里面String工具类的substringBetween方法。 我的大概思路是这样的,首先查找出Response字样的个数。 然后for循环里面进行文本操作, 比如Question 1就取"Question 1:"到"Response 1"字样中间的, Response 1就取"Response 1"到"Question 2"之间的; 最后一个回答单独处理下
这种方案有很大的局限性。 首先是正文里面不能有Response字样(不然第一步查个数就比实际的QA对多了)。 二是对格式的要求限死了,要包括标点符号都符合才行。
然而实际情况是,有的输入文本只有一对QA,就直接是不带番号的,即
Question:
XXXXXXXXXXXXXX
Reponse:
YYYYYYYYYYYYYYYY
还有部分输入文本的标题有些出入,不是Question和Response,而是Comment和Explanation.
我模糊感觉这种应该要用正则表达式来匹配吧。 自己琢磨一段时间,还是没弄出来。求助一下大家思路。
按行读/按行处理
如果本行是
Question
开头(或者写个正则匹配一下),那么接下来的是问题如果本行匹配
Response
,那么和Question
中间的部分是问题如果本上又是
Question
,那么答案结束