【问题标题】:Autohotkey regex exclude part of stringAutohotkey 正则表达式排除部分字符串
【发布时间】:2015-10-06 05:38:28
【问题描述】:

使用 Autohotkey,我需要排除字符串的一部分,同时仍然编写它的第一部分和最后一部分。 我会解释的。给定字符串:

GSM NWS\TOP N 池 1\1。 TOP N Pool 1 排名:

GSM NWS\TOP N 池 1\1。 TOP N 池 1 BCCH:

GSM NWS\TOP N 池 1\1。 TOP N 池 1 BSIC:

我只需要提取从“1.”到“:”的部分,不包括“TOP N Pool 1”部分。因此,想要的字符串应该是:

  1. 排名
  2. BCCH
  3. BSIC

我已经解决这个问题很长时间了,并且我使用过 RegExMatch:

RegExMatch(A_LoopField,  "\d+\.(.*?)\[\d\]", fields%lineCount%)

这个正则表达式不排除我想省略的中间字符串。

有什么想法吗?

P.S:我对这种语言和正则表达式的用法还比较陌生……如果我在这里犯了任何基本错误,请原谅。

谢谢大家。

【问题讨论】:

  • 有很多方法可以匹配您需要的数据。你必须具体说明什么是可变的,什么是固定的,可选的(等等),你想要抓取的文本类型,否则它就是一个猜谜游戏..

标签: regex string autohotkey


【解决方案1】:

您可以使用捕获组,例如在正则表达式中:

(\d\.).+\d\s(\w+)\s:

括号中的部分捕获文本,之后您可以使用 $1$2 等。这里 $1 用于 (\d\.) 捕获例如:1.$2 用于 @ 987654329@ 应该捕获Rank。所以我想(因为我没有 AHK 的背景)你应该能够做这样的事情:

NewStr := RegExReplace("GSM NWS\TOP N Pool 1\1. TOP N Pool 1 Rank :", "(\d\.).+\d\s(\w+)\s:", "$1$2")

结果应该是:1.Rank

查看正则表达式的工作原理:DEMO

【讨论】:

  • 您好,您提供的解决方案有一定的意义,但结果与预期有些不同。在隔离这两组的同时,当我们用这两个子字符串替换文本时,原始字符串保持不变。简而言之:我们作为“Haystack”传递给 RegExReplace 命令的相同字符串是该命令的最终结果。有没有办法只显示 $1 和 $2,不包括字符串的其余部分?谢谢。
  • @Bruno 试试.+(\d\.).+\d\s(\w+)\s: 我给我反馈:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 2021-09-16
  • 1970-01-01
  • 2021-05-31
相关资源
最近更新 更多