【问题标题】:Need assistance with RegEx using Perl and AutoHotKey在使用 Perl 和 AutoHotKey 的 RegEx 方面需要帮助
【发布时间】:2020-11-09 05:13:52
【问题描述】:

我正在尝试使用 Perl 从 TestString 读取特定值,但似乎无法到达我需要的位置。希望有人可以帮助我。

我正在尝试读取开始字符串的值以及小数点左侧的两个数字并将其保存到 value1。它必须是在小数点左侧和字符串开头结束两个数字的值,因为前导数字可能是 4、3 或 2 个数字(例如 123420.78616 或 3320.78616)。

因此,在下面的示例中,我希望使用 regexmatch 和 autohotkey 将“133”保存到 value1。

第二个正则表达式是,我需要将数字的另一部分保存到 value2。 Value2 将从小数点左侧的两个数字开始,然后到字符串的末尾。所以我需要将“20.78616”保存为 value2。

在下面,我只能使用使用的 Perl 捕获完整的数字,并且我已经尝试了几个小时与 regex101.com 的组合,但无济于事。

希望有人可以帮助我。

TestString := "13320.78616"
RegExMatch (TestString, "(([\w\.]+)$)", value1)
RegExMatch (TestString, "(([\w\.]+)$)", value2)

msgbox, %value1%
msgbox, %value2%

【问题讨论】:

  • 您对要匹配的内容的描述有点不清楚。请添加一些真实的数据和预期的结果。
  • 可以除以 100 并取整数:int($str/100)(如果它始终是该字符串中的数字)

标签: regex perl autohotkey


【解决方案1】:

建议以下正则表达式:

(\d+)(\d\d\.\d*)

注意三点:

  • 如果您只想捕获数字而不是字母,请使用 \d 而不是 \w
  • (\d+) 捕获至少一位数字的前导字符串,并由于下一部分而在小数点前两位数结束:
  • (\d\d\.\d*) 准确捕获两位数字、小数点和任何后续数字。

【讨论】:

  • 所以使用 (\d+)(\d\d\.\d*) 不会得到 133 = value1。相反,我得到了完整的字符串 13320.78616。使用 (\d\d\.\d*) 确实得到 20.78616 = value2。关于第一个值还有其他建议吗?
  • 我注意到在使用 regex101.com 时,它将 133 显示为 group1 匹配,将 20.78616 显示为 group2 匹配。不知道如何处理不同的组...
  • 我明白了 - 想出了如何在 autohotkey 中获取组。只需将数字添加到值的末尾即可。感谢您的帮助!
猜你喜欢
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
  • 2021-04-23
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多