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

如何使用Java Regex提取字符串列表中的目标短语?

提取括号内短语的正则解决方案

嘿,刚学正则遇到这种卡壳的情况太正常了!我来帮你搞定这个短语提取的问题~

先看你给出的示例字符串:

01/01/2018 123 -TESTING. PHRASE (I want to get this phrase) 98765 1.274.89

你想要的是括号里的I want to get this phrase,对吧?咱们一步步来解决:

针对你的场景的核心正则

要提取括号内的内容(不含括号本身),可以用这个正则:

\((.*?)\)

拆解一下这个正则的逻辑:

  • \(:转义左括号,因为括号在正则里是特殊分组字符,必须加反斜杠才能匹配实际的左括号
  • (.*?):非贪婪捕获组,.*匹配任意字符(默认不含换行),?让它变成非贪婪模式——意思是匹配到第一个右括号就停止,避免误匹配后面的内容
  • \):转义右括号,匹配实际的右括号

怎么在代码里用?

举个Python的例子(其他语言逻辑类似,只是API细节不同):

import re

# 你的示例字符串
sample_text = "01/01/2018 123 -TESTING. PHRASE (I want to get this phrase) 98765 1.274.89"

# 用正则搜索匹配
match_result = re.search(r'\((.*?)\)', sample_text)

if match_result:
    # group(1)取捕获到的括号内的内容
    target_phrase = match_result.group(1)
    print(target_phrase)  # 输出: I want to get this phrase

为什么你之前的正则没用?

  • ^[a-zA-Z]\D+$:这个正则是匹配整行以字母开头、后面全是非数字的内容,但你的目标短语在字符串中间,且原字符串包含大量数字,完全不适用
  • [\w[.*]]+:这个写法本身有语法错误,字符组[]内的嵌套写法不合法,也没有针对括号的结构设计,自然匹配不到目标内容

进阶:如果括号里有换行怎么办?

如果你的短语可能跨换行,需要开启“DOTALL”模式(不同语言叫法略有差异),让.能匹配换行符:

  • Python里加re.DOTALL参数:
    match_result = re.search(r'\((.*?)\)', sample_text, re.DOTALL)
    
  • Java里用Pattern.DOTALL标记:
    Pattern pattern = Pattern.compile("\\((.*?)\\)", Pattern.DOTALL);
    Matcher matcher = pattern.matcher(sampleText);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:12:31