我有一些用不同语言回来的文字。现在,文本以(en-us aka english for US)的形式从客户端返回:
Stuff here to keep.
-- Delete Here --
all of this below
gets
deleted
我正在使用正则表达式匹配“删除此处”,并在该行及其下方剪切所有内容,并留在“此处保留此内容”。
“删除此处:”是可以使用任何语言返回的文本。
所以对于意大利人来说,匹配的关键词是“Elimina qui”:
Stuff here to keep (in italian)
-- Elimina qui --
all of this bellow
gets
deleted
我的正则表达式使用类似这样的内容来匹配“删除此处”但是如何让它与其他语言一起使用?
我是否为每个单词组合“删除”,“在这里”,(还有更多要匹配的单词等)查找字典,等等。如何使此解决方案适用于所有语言?
注意:这是一个非常非常简单的例子。 “ - 删除这里 - ”只是我必须匹配的一种模式。其他模式可能只是“删除此处”。还有其他模式,如“全部删除” (再次对于文学语境,我有其他文本模式 以多种语言匹配。)
Pattern PATTERN = Pattern.compile("^(.*?)-+ *Delete Here *-+", Pattern.DOTALL);
Matcher m = PATTERN.matcher(text);
if (m.find()) {
// Perform Magic!
}
答案 0 :(得分:2)
如果您的数据的其他部分没有连续破折号,则可以使用否定字符类来匹配这些破折号。
另一种可能的选择是使用\p{L}
匹配来自任何语言的任何类型的字母。
-- *\p{L}+ \p{L}+ *--
请参阅Live demo
答案 1 :(得分:1)
你可以在正则表达式中使用OR
Pattern PATTERN = Pattern.compile("^(.*?)-+ *(?:Delete Here|Elimina qui) *-+", Pattern.DOTALL)
但是如果你有很多(hunderds)OR字符串,那么从性能的角度来看它可能会有问题。对于这样的数字最好是制作简单的模式来检索“ - ”之间的字符串并使用一个集来检查它是否是你要找的