使用正则表达式解析不同的语言环境/语言?

时间:2013-12-19 17:14:58

标签: java regex

我有一些用不同语言回来的文字。现在,文本以(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!
}

2 个答案:

答案 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字符串,那么从性能的角度来看它可能会有问题。对于这样的数字最好是制作简单的模式来检索“ - ”之间的字符串并使用一个集来检查它是否是你要找的