【问题标题】:Get tag name of the first question by using regex使用正则表达式获取第一个问题的标签名称
【发布时间】:2018-09-12 07:17:26
【问题描述】:

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

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

我想用

替换剪贴板

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

来源看起来像:

    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

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

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

【问题讨论】:

  • 在我看来,您想将非换行符与[^\n](而不是[^n])匹配。此外,您需要通过添加 s 修饰符使 . 匹配换行符。试试sm).*?^([^\n]*modified[^\n]*)$.*
  • 另外,在我看来,您只需要FoundPos := RegExMatch(Clipboard, ".*modified.*", res) ; 并通过res[0] 获取行值。
  • 试试^(.+)modified(.+)$
  • @WiktorStribiżew 我想要第一行。因此我使用你的小修改:FoundPos := RegExMatch(Clipboard, ".*?(modified).*", res) ; MsgBox,% res[0] " = res[0]" 但我现在得到了结果。它是空的嗯。

标签: regex autohotkey


【解决方案1】:

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

为了解决您可能使用的问题

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

通过res 获取整行值,通过res1 获取关键字之前的文本,通过res2 获取关键字本身。

详情

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

【讨论】:

  • 我想要第一行。因此我使用你的小修改:.*?(修改)。*但我现在得到了结果。它是空的嗯
  • @SL5net 你检查了res 的值吗?
  • 我的 IDE 建议的语法是:RegExMatch(Haystack, NeedleRegEx [, UnquotedOutputVar = "", StartingPos = 1]) UnquotedOutputVar 是一个字符串?不是数字?
  • UnquotedOutputVar 是一个保存正则表达式匹配的变量。第一项将是匹配值,x[1] 将保存第一个捕获的值(如果正则表达式中有捕获组),依此类推。
  • 不要使用[\s\S],您可以使用.s 修饰符,[\s\S] 是一种与任何字符匹配的解决方法构造。所以,sm)^.*?(\n[^\n]*)(modified|asked|answered) 也一样。
猜你喜欢
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多