【问题标题】:Extract substring (that contains a dynamic portion) from a string?从字符串中提取子字符串(包含动态部分)?
【发布时间】:2026-01-08 16:05:01
【问题描述】:

假设我有以下位于较大字符串中的子字符串:

我的名字是{name}

{name} 只是一个占位符,因为每次运行程序时它都可能不同。例如:

Run #1:大家好,我叫Phil!很高兴认识你。

Run #2:我的名字是Robert,我真的很酷。

我该怎么做(以最简洁的方式):

  1. 验证字符串是否包含My name is {name} 子字符串? (不区分大小写)
  2. {name} 部分提取到我可以使用的单独变量中?

【问题讨论】:

  • 名称是否总是一串字母字符,并且总是后跟一个句点?还有,可以发生多少次?
  • @shree.pat18 是的,总是一串字母字符。任何非字母字符都可以跟在它后面。子字符串My name is {name} 可能出现多次。
  • 也许你试试这个.. 将Hi there My Name is 放在一个字符串中,将Nice To meet you 放在一个字符串中,将所需的名称放在一个字符串中连接它们
  • @looser 字符串不保证有Hi there!Nice to meet you.。查看我最近的编辑。

标签: java regex string pattern-matching extract


【解决方案1】:

你可以这样做:

String s = "Hi there! My name is Phil. Nice to meet you.";
Pattern p = Pattern.compile("my name is (\\w*)", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(s);
if (m.find()) {
    System.out.println(m.group(1));
} else {
    System.out.println("No match to " + s);
}

(\\w*) 创建一个包含所有“单词字符”的捕获组。更多信息可以在PatternMatcher 的文档中找到。

附:很难通过所有编辑来跟踪您的要求。我希望这符合您的需要。如果没有,修改它应该相当简单。

【讨论】:

  • 谢谢。 (对不起所有的编辑。试图让问题更清楚。)
  • 如果我只想从以下字符串中提取登录名怎么办: String = "MyAccountSigninSignupSupportJira";我尝试使用相同但没有得到任何运气。有人可以帮我吗!
  • @RanjanGupta - 我不确定你的行为是什么,你尝试了什么,或者为什么它不起作用。我建议您发布一个单独的问题并提供这些详细信息。这样你更有可能得到答案。