(我的编程问题似乎有点狡猾,但我没有看到其他解决方案。)
文本在Eclipse的编辑器中编写。通过激活Eclipse的自制Table视图插件,文本质量由接收编辑器文本的激活Python脚本(不可由我编辑)自动检查。除正常空格('')外,编辑器文本将从空格字符(\ n,\ t)中删除,否则句子无法进行QA检查。脚本完成后,会将不正确的句子返回到表格中。
可以单击表中的句子,插件将在活动编辑器中搜索(每行一行)单击的句子。这适用于单行句子。但是,在活动编辑器中找不到多行句子,因为编译后的句子中缺少所有\ n和\ t。
为了解决这个问题,我更改了脚本,因此它将完整的编辑器文本作为一个字符串。我尝试了以下方法:
String newSentence = tableSentence.replaceAll(" ", "\\s+")
Pattern p = Pattern.compile(newSentence)
Matcher contentMatcher = p.matcher(editorContent) // editorContent is a string
if (contentMatcher.find()) {
// Get index offset of string and length of string
}
通过将所有空格更改为\ s +,我希望得到匹配。但是,这不起作用,因为它看起来如下所示:
所以,我的问题是:如何调整编译器的输入? 我在Java方面缺乏经验,所以我没有看到如何改变这个..而且我遗憾的是无法改变Python脚本也能返回完整的句子......
答案 0 :(得分:2)
为你的正则表达式添加第三个和第四个反斜杠,所以它看起来像这样:\\\\s+
。
Java没有原始(或逐字)字符串,因此您必须转义反斜杠,因此在正则表达式引擎中它会将其视为双反斜杠。这可以解决添加s+
而不是空格的问题。
当您在代码中键入正则表达式时,它会像这样:
\\\\s+
| # Compile time
V
\\s+
| # regex parsing
V
\s+ # actual regex used
根据@nhahtdh评论(固定数量的反斜杠)
更新了我的答案答案 1 :(得分:1)
您需要使用"\\\\s+"
代替"\\s+"
,因为\
是regex replacement string syntax中的转义字符。要在替换文本中指定文字\
,您需要在替换字符串中编写\\
,并且由于"\\\\"
需要在Java字符串文字中转义,因此需要加倍\
请注意,\
恰好用作Java中正则表达式替换字符串语法中的转义字符。其他语言(例如JavaScript)使用$
来转义$
,因此\
不需要在JavaScript的正则表达式替换字符串中转义。
如果要用文字文本替换匹配项,可以使用Matcher.quoteReplacement
来避免处理正则表达式替换字符串中的转义:
String newSentence = tableSentence.replaceAll(" ", Matcher.quoteReplacement("\\s+"));
在这种情况下,由于您正在搜索字符串并将其替换为另一个字符串,因此您可以使用String.replace
来代替正常的字符串替换:
String newSentence = tableSentence.replace(" ", "\\s+");