我试图将由特定单词分隔的任何合理长度的2个子句子分组(在示例“AND”中),其中第二个可以是可选的 . 一些例子:
情况1:
foo sentence A AND foo sentence B
应给
"foo sentence A" --> matching group 1
"AND" --> matching group 2 (optionally)
"foo sentence B" --> matching group 3
CASE2:
foo sentence A
应给
"foo sentence A" --> matching group 1
"" --> matching group 2 (optionally)
"" --> matching group 3
我尝试了以下正则表达式
(.*) (AND (.*))?$
并且它有效,但只有在CASE2中,我在字符串的最后位置放置一个空格,否则图案不匹配 . 如果我在圆括号组内包含“AND”之前的空格,则在情况1中,匹配器包括第一组中的整个字符串 . 我想知道一个前瞻性和后瞻性断言,但不确定他们能帮助我 . 有什么建议吗?谢谢
5 回答
我用这个正则表达式:
explanation:
如何使用
这将用你的词分开句子,并给你一个子部分列表 .
说明
此正则表达式将请求的字符串部分返回到请求的组 .
and
是可选的,如果在字符串中找不到,那么整个字符串将被放入组1.所有\s*?
强制捕获的组自动修剪其空白区域 .^\s*?\b(.*?)\b\s*?(?:\b(and)\b\s*?\b(.*?)\b\s*?)?$
团体
0获取整个匹配字符串
在分隔单词
and
之前获取字符串,如果没有and
则整个字符串出现在此处获取分隔词,在这种情况下它是
and
获取字符串的第二部分
Java代码示例:
情况1
案例2,使用相同的正则表达式
你的情况2有点奇怪......
但我会这样做
你检查
parts.length
. 如果length == 1,则为case2 . 你只是在数组中有句子,你可以添加空字符串作为"group2/3"如果在case1中你直接
parts
:更改你的正则表达式,以便在他的第一句可选后创建空格:
或者您可以使用
split()
来使用AND
以及任何周围空格: