【问题标题】:How to get the middle strings with regex?如何使用正则表达式获取中间字符串?
【发布时间】:2018-03-12 04:11:38
【问题描述】:

我有一个像这样的输入字符串

DatalogSetupFile:BTS50xx1EJA\3.20\log_all.stp

DatalogSetupFile:\3.20\log_all.stp 是不变的。我希望从字符串中提取BTS50xx1EJA。我该怎么做?

【问题讨论】:

  • 这不是代码/SQL/正则表达式编写服务,您可以在其中发布您的需求和选择的语言列表,然后代码猴子会为您生成代码。我们非常乐意提供帮助,但我们希望您首先努力自己解决问题。完成后,您可以解释您遇到的问题,包括您工作的相关部分,并提出具体问题,我们会尽力提供帮助。祝你好运。
  • string.substring(18, string.length()-17)
  • @chrisz 谢谢它的工作!我试过 (?

标签: java regex


【解决方案1】:

你可以做一个正则表达式组,在其中你可以指定哪些是静态内容,然后指定哪些是动态内容作为一个整体,这样你就可以得到一个整体的动态内容,

您可以如下定义正则表达式

^(?:DatalogSetupFile:\s)(.*)(?:\3.20\log_all.stp)$

试试这个Demo

这里你可以使用第一组来获取你的动态字符串

【讨论】:

  • 发布一个完整的答案,而不仅仅是一个非现场资源的链接。不要误会我的意思:站外链接有用且有价值;但就其本身而言,它们不是答案。你几乎开始解释正则表达式中组的使用......但远远没有尝试。
  • 为什么字符串的最后一部分需要非捕获组?
  • 答案应该是独立的,所有相关内容都在这里。链接只能用作额外的参考材料。此处不接受指向场外答案的链接(查看此链接)。
  • 我使用了非捕获组正则表达式,因为他只需要特定的字符串
  • 你最后没有非捕获组!您有一个以冒号开头(可选)的捕获组! (?: ) 诗句(:? )。使用非捕获组没有什么意义;组外的东西(无论是否捕获)都不会被捕获。
【解决方案2】:

试试这个正则表达式:

\s\K[^\\]+

在 Java 中看起来像:

String myInputString = "DatalogSetupFile: BTS50xx1EJA\\3.20\\log_all.stp";
Pattern myPattern = Pattern.compile("\\s\\K[^\\\\]+");
Matcher myMatcher = Pattern.matcher(myInputString);
System.out.println(myMatcher.group(0));

【讨论】:

  • 您的代码 .compile("\s\K... 中没有足够的反斜杠。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2011-03-18
  • 1970-01-01
  • 2011-03-31
相关资源
最近更新 更多