修改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
相关产品推荐
相关产品推荐

