You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Java正则表达式,捕获带西班牙语重音单词的前置单词

捕获西班牙语重音结尾单词的前置词解决方案

问题分析

你原本的正则\b(\w*)[[à-ü]|[À-Ü]]\b只能匹配以西班牙语重音结尾的单词,但要捕获这类单词的前置词(比如El mandatario celebró中celebró的前置词mandatario),之前的写法存在两个核心问题:

  • 捕获组定义在目标单词内部,只能抓取该单词的前缀字符,而非独立的前置单词;
  • 字符组写法错误:[[à-ü]|[À-Ü]]会将[、]、|这些符号也纳入匹配范围,正确的重音字符组应为[à-üÀ-Ü]。

正确实现方案

正则表达式调整

要捕获前置单词,需重构正则结构:先匹配并捕获前置单词,再匹配分隔空格,最后匹配以重音结尾的目标单词。最终正则为:

\b(\w+)\s+\w*[à-üÀ-Ü]\b
  • \b(\w+):匹配完整的前置单词并标记为捕获组1;
  • \s+:匹配一个或多个空格(分隔前后单词);
  • \w*[à-üÀ-Ü]\b:精准匹配以西班牙语重音字符结尾的单词。

Java代码实现

Java中需对正则的反斜杠进行转义,完整代码示例:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SpanishPrecedingWordMatcher {
    public static void main(String[] args) {
        String text = "El mandatario celebró en sus redes. Tengo algún café con María";
        // 编译转义后的正则表达式
        Pattern pattern = Pattern.compile("\\b(\\w+)\\s+\\w*[à-üÀ-Ü]\\b");
        Matcher matcher = pattern.matcher(text);
        
        // 遍历所有匹配结果,提取前置单词
        while (matcher.find()) {
            String precedingWord = matcher.group(1);
            System.out.println("捕获的前置单词:" + precedingWord);
        }
    }
}

运行后输出结果:

捕获的前置单词:mandatario
捕获的前置单词:Tengo

内容的提问来源于stack exchange,提问作者lafinur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:38:32