正则表达式替换所有匹配项,但不替换第一个和最后一个字符

丹尼尔森

恐怕我看了很明显的东西。但是我想匹配并替换单词。但是,只有在存在非字母字符的情况下,两个字符都在拖尾之前。像火柴kaas

<p>Kaas bla bla
bla more kaas, bla 
another line adding more kaas to....

此正则表达式适用\ P {L} kaas \ P {L}(kaas是变量)。但是,当我更换kaas使用cheese,我得到:

<pcheesebla bla
bla morecheese bla 
another line adding morecheeseto....

现在我可以做:

final String nonChar = "\\P{L}";
final String dutchWord = "kaas";
final String englishWord = "cheese";
final String text = getText();
final Pattern p = Pattern.compile(nonChar + dutchWord + nonChar);
final Matcher match = p.matcher(text);
while (match.find()) {
    final int start = match.start();
    final int end = match.end();
    final String c1 = Character.toString(text.charAt(start));
    final String c2 = Character.toString(text.charAt(end - 1));
    final String result = match.replaceFirst(c1 + englishWord + c2);
    //final String result = match.replaceAll(c1 + englishWord + c2);// not a `c1` and `c2` are equal
}

只能使用一次,因为我无法获取正确的信息Matcher来找出的前后字符kaas我很确定我在向前和向后的正则表达式字符上都看到了一些东西-我认为。我尝试使用,?:但不断得到PatternSyntaxExceptions。

我需要添加什么来解决此问题?以及如何使用Java。我使用的P{L}不是*w字符类型,这是否有所不同

注意:我使用P的原因是它也应该适用于我需要的非西方语言。

阿努巴瓦

您可以在此处对零宽度断言使用环视:

(?<!\p{L})kaas(?!\p{L})

这只会断言kaas在另一个unicode字母之前或之后。

在Java中,它将是:

final Pattern p = Pattern.compile("(?<!\\p{L})" + Pattern.quote(dutchWord) + "(?!\\p{L})", 
                   Pattern.CASE_INSENSITIVE); 

PS:Pattern.quote对于用户提供的输入,使用起来更安全

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式替换特定匹配项的字符串的第一个和最后一个字符

来自分类Dev

正则表达式替换特定匹配项的字符串的第一个和最后一个字符

来自分类Dev

正则表达式:删除除第一个字符和最后一个数字以外的所有字符

来自分类Dev

使用正则表达式VB NET匹配并替换字符串中的第一个和最后一个字符以及子字符串

来自分类Dev

正则表达式替换一个字符,但如果有多个,则仅替换第一个

来自分类Dev

Python正则表达式-匹配某些第一个字符,但不匹配W

来自分类Dev

正则表达式匹配字符串的第一个和最后一个字符,但是为什么呢?

来自分类Dev

如何把 xpages 正则表达式(第一个字符和最后一个字符)不能是特殊字符

来自分类Dev

匹配正则表达式中的第一个字符?

来自分类Dev

正则表达式匹配第一个和最后一个字符

来自分类Dev

正则表达式匹配第一个和最后一个字符

来自分类Dev

使用正则表达式替换匹配字符串的最后一个字符

来自分类Dev

正则表达式替换组中的第一个字符

来自分类Dev

Notepad ++中的正则表达式:用正则表达式部分的第一个字符替换

来自分类Dev

Notepad ++中的正则表达式:用正则表达式部分的第一个字符替换

来自分类Dev

正则表达式(替换)只有第一个匹配项

来自分类Dev

正则表达式替换排除第一个和第n个字符

来自分类Dev

正则表达式提取第一个单词+所有后续单词的第一个字符

来自分类Dev

正则表达式表达大写的第一个字符

来自分类Dev

正则表达式表达大写的第一个字符

来自分类Dev

在R中使用正则表达式同时删除第一个和最后一个字符

来自分类Dev

正则表达式的第一个和最后一个字符必须是数字

来自分类Dev

正则表达式匹配单词的第一个字母,但不匹配“和”

来自分类Dev

C#正则表达式,匹配但不包括匹配字符串之前的第一个字符

来自分类Dev

正则表达式匹配不包括第一个字符的字符串

来自分类Dev

正则表达式不捕获第一个字符

来自分类Dev

非法第一个字符的正则表达式

来自分类Dev

使用正则表达式获取第一个字符

来自分类Dev

排除正则表达式匹配的最后一个字符

Related 相关文章

  1. 1

    正则表达式替换特定匹配项的字符串的第一个和最后一个字符

  2. 2

    正则表达式替换特定匹配项的字符串的第一个和最后一个字符

  3. 3

    正则表达式:删除除第一个字符和最后一个数字以外的所有字符

  4. 4

    使用正则表达式VB NET匹配并替换字符串中的第一个和最后一个字符以及子字符串

  5. 5

    正则表达式替换一个字符,但如果有多个,则仅替换第一个

  6. 6

    Python正则表达式-匹配某些第一个字符,但不匹配W

  7. 7

    正则表达式匹配字符串的第一个和最后一个字符,但是为什么呢?

  8. 8

    如何把 xpages 正则表达式(第一个字符和最后一个字符)不能是特殊字符

  9. 9

    匹配正则表达式中的第一个字符?

  10. 10

    正则表达式匹配第一个和最后一个字符

  11. 11

    正则表达式匹配第一个和最后一个字符

  12. 12

    使用正则表达式替换匹配字符串的最后一个字符

  13. 13

    正则表达式替换组中的第一个字符

  14. 14

    Notepad ++中的正则表达式:用正则表达式部分的第一个字符替换

  15. 15

    Notepad ++中的正则表达式:用正则表达式部分的第一个字符替换

  16. 16

    正则表达式(替换)只有第一个匹配项

  17. 17

    正则表达式替换排除第一个和第n个字符

  18. 18

    正则表达式提取第一个单词+所有后续单词的第一个字符

  19. 19

    正则表达式表达大写的第一个字符

  20. 20

    正则表达式表达大写的第一个字符

  21. 21

    在R中使用正则表达式同时删除第一个和最后一个字符

  22. 22

    正则表达式的第一个和最后一个字符必须是数字

  23. 23

    正则表达式匹配单词的第一个字母,但不匹配“和”

  24. 24

    C#正则表达式,匹配但不包括匹配字符串之前的第一个字符

  25. 25

    正则表达式匹配不包括第一个字符的字符串

  26. 26

    正则表达式不捕获第一个字符

  27. 27

    非法第一个字符的正则表达式

  28. 28

    使用正则表达式获取第一个字符

  29. 29

    排除正则表达式匹配的最后一个字符

热门标签

归档