繁体   English   中英

Java Regex:基于除撇号之外的非单词字符进行拆分

[英]Java Regex: Split based on non-word characters except for apostrophe

我试图基于空格和非单词字符进行拆分和包含,除了撇号。

我已经能够将它拆分并包含空格和非单词字符,但我似乎无法弄清楚如何从非单词字符中排除撇号。

这是我目前的Regex ......

str.split("\\s|(?=\\W)");

...在此代码示例上运行时:

program p;
begin
    write('x');
end.

...产生这个结果:

program
p
;
begin

write
(
'x   <!-- This is the problem.
'
)
;
end
.

这几乎是正确的,但我的目标是跳过撇号,这是结果:

program
p
;
begin

write
(
'x'   <!-- This is the wanted result.
)
;
end
.

UPDATE

正如我所建议的那样:

str.split("\\s|(?=\\W)(?<=\\W)");

这几乎可以工作,但不能正确拆分所有特殊字符:

program
p;
begin
write(
'x'
)
;
end.

你有没有尝试过...

[^\w']

这将匹配任何既不是单词字符也不是撇号的字符。 可能很简单,根据您的输入工作。

如果你使用[^\\w']作为你的正则表达式来运行替换操作而使用\\n\\1\\n作为替换字符串,它应该让你接近你想要的位置。

你可以分开这个。

\s|('[^']*')|(?=\W)

见演示。

https://regex101.com/r/mL7eL6/1

单独处理撇号并要求前面的非单词:

str.split("\\s+|(?=[^\\w'])|(?<=\\W)(?=')");

查看现场演示

作为替代方案,可以扫描\\ b [\\ w'] + \\ b的字符串

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM