当前位置: 首页 > 知识库问答 >
问题:

Regex-如果仅以关键字开头,则提取括号和引号中的单词

司寇经亘
2023-03-14

我有以下字符串:

[The quick]brown fox[mykey*=“is a super-fast9”]animal[mykey^=“that”]can runned“very rapid”and[otherkey=“easyless”](棕色狐狸[mykey*=“是一种超级快的”]动物[mykey|=“that's”]可以“非常快”地跑,[other

我需要提取双引号中的单词(用空格分隔),这些单词同时位于以特定关键字(mykey)开头的括号中。

到目前为止,我有:

快速

mykey*=“是

一个

超快9”

mykey^=“那个”

otherkey= "毫不费力"

但我想要:

一个

超快9

那个

示例链接:https://regex101.com/r/zmNse1/2


共有3个答案

秦权
2023-03-14

这个正则表达式应该做你想要的:
(?

谷飞星
2023-03-14

您可以将所需的子字符串与相对简单的正则表达式进行匹配,并在引号之间捕获部分,然后使用1个或多个空格模式拆分捕获:

var pattern = "\\[mykey[^][=]+=\"([^\"]*)\"]";
var s = "[The quick] brown fox [mykey*=\"is a  super-fast9\"] animal [mykey^=\"that\"] can run \"very rapid\".";
var result = Regex.Matches(s, pattern)
    .Cast<Match>()
    .SelectMany(v => v.Groups[1].Value.Trim().Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries))
    .ToList();
Console.WriteLine(string.Join("\n", result));

请参见C#演示。

模式是

\[mykey[^][=]+="([^"]*)"]

请参阅正则表达式演示。

图案细节

  • \[ - 文字 [
  • mykey - 文字子字符串
  • [^][=] - 除 []= 以外的 1 个或多个字符
  • = - 等号
  • - 双引号
  • ([^“]*) - 组 1:除
  • “] - 文字 ”] 子字符串。

请注意,捕获的值首先从前导/尾随空格中修剪(使用. trim()),以避免结果中的空值。@"\s"匹配1个或多个空格字符。. Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries)将Group 1值与空格拆分。

蒙勇
2023-03-14

Wiktor提供的解决方案是最合乎逻辑的,但是为了正则表达式的挑战,请参阅此模式\[(?!mykey)[^\[] |([^\s\[=\“] )(?=[^\“]*\”\]),检查组 #1 演示

\[                  # "["
(?!                 # Negative Look-Ahead
  mykey             # "mykey"
)                   # End of Negative Look-Ahead
[^\[]               # Character not in [\[] Character Class
+                   # (one or more)(greedy)
|                   # OR
(                   # Capturing Group (1)
  [^\s\[=\"]        # Character not in [\s\[=\"] Character Class
  +                 # (one or more)(greedy)
)                   # End of Capturing Group (1)
(?=                 # Look-Ahead
  [^\"]             # Character not in [\"] Character Class
  *                 # (zero or more)(greedy)
  \"                # """
  \]                # "]"
)                   # End of Look-Ahead
 类似资料:
  • 问题内容: 我对以下代码行的语法感到困惑: 数据框对象由2列(“大脑”和“身体”)组成 当我打印x_values时,我得到这样的东西: 就dataframe对象的属性和方法而言,我知道pandas文档,但双括号语法使我感到困惑。 问题答案: 考虑一下: 来源DF: 选择一列-生成Pandas.Series: 选择DataFrame的子集-结果为DataFrame: 结论: 第二种方法允许我们从Da

  • 以下是降价文本的示例: #“我的标题” !图像标题。{ 样式=“浮动:右; 宽度: 20%; 边框: 1px”} 有的“引用文字”,有的*“强调文字”*等。 在bash脚本中,我试图用法语引号替换任何双引号。 例如:“word”应变成« 换句话说,一个单词前的所有引号都应该替换为一个开放的法语引号,后跟一个不间断的空格;而且一个单词后面的所有引号都要换成一个不换行的空格后面跟着一个闭合的法语引号;

  • 我有一根绳子 我想用逗号分隔,但需要排除括号和引号内的逗号(单引号和双引号)。 这样地

  • 问题内容: 我想提取所有 用 大括号括起来的 单词 ,所以我有一个这样的表达式 匹配的字符串可能包含任意多个这样的单词,但是我开始认为我正在以错误的方式解决此问题。 我的尝试 而且我尝试将花括号这些词提取为组,以便可以使用每一个匹配项。所以,我做了一个正则表达式: 注意:我使用的是JRegex语法,因此我需要避免掉一些curl。 结果 我得到的结果是一个(虽然是正确的)比赛,而我希望有两个比赛和。

  • 我正在寻找正确的regex来为我提供以下结果: null 例子: 福吧 组1:foo 组2:bar 说明:在空格上拆分 组1:foo bar 描述:用双引号包围,所以将foo和bar分组,但不要打印双引号 null null null null null 组1:foo bar 组2:堆栈溢出 组1:foo'bar 组2:堆栈溢出 组3:如何 组4:do 组5:您 组6:do

  • 我使用的是Sublime Text 3,我有一个CSV文件,其中包含单引号: 输入: 使用正则表达式,我想“中和”但不删除不合适的单引号(例如,)和撇号(例如)。 “中和”的具体意思是将放在每个单引号/撇号前面,因此输出为: 输出: 到目前为止的进展:我想我有2件需要解决的难题。 首先,我可以使用正则表达式自己查找并替换每个字段的引号示例: 输入:查找: