首页 > 解决方案 > 使用正则表达式获取第一个问题的标签名称

问题描述

我遇到了以下正则表达式模式的问题:

m).*?^([^n]*)(modified)([^n]*)$.*

我想用

Clipboard := RegExReplace(Clipboard, "m).*?^([^n]*)(modified)([^n]*)$.*" ,"" )

来源看起来像:

Ask Question    Interesting    326 Featured
Hot     Week     Month    1     vote    0    answers    12    views
Type Guard for empty object
typescript modified 2 mins ago kremerd 312
0    votes

预期结果应该是:

typescript modified 2 mins ago kremerd 312

但它什么都没有替代。如果这可行,我想稍后^([^n]*)使用 regExMatch 获取标记名。

我正在使用来自https://autohotkey.com的 autohotkey(Windows 开放源代码)编写脚本

标签: regexautohotkey

解决方案


您想匹配包含modified子字符串的行。正则表达式中的点默认不匹配换行符,因此您需要传递s(DOTALL) 修饰符(您可以将它与mMULTILINE 修饰符一起添加,以匹配^字符串位置的开头并$匹配行尾位置)。此外,要匹配您需要的非换行符[^\n](不是[^n])。

要解决您可能使用的问题

RegExMatch(Clipboard, "s)^.*?(\n[^\n]*)(modified|asked|answered)", res)

获取整行值 via res,关键字 via 之前的文本res1和关键字本身 with res2

细节

  • s) -.现在匹配任何字符,包括换行字符
  • ^- 字符串的开头
  • .*?- 任何 0+ 个字符,尽可能少
  • (\n[^\n]*)- 第 1 组(通过res1​​稍后访问):换行符后跟 0+ 个字符,而不是换行符
  • (modified|asked|answered) - 三种选择中的任何一种modifiedaskedanswered

推荐阅读