正则表达式提取2个文本之间的字符串 - 结束于()

时间:2016-03-01 16:58:20

标签: regex powershell

我正在尝试将字符串中的两个文本占位符之间的文本隔离

以下3个字母之间的任何内容,以()结尾 - 括号

示例

['8', '10', '918', '101010']

我尝试了很多组合,包括

Kwl  ThisString ()
Kwl   String_2()
kwl   string_3_as_well()
kwl maybethisverylongstringaswell()

3 个答案:

答案 0 :(得分:2)

这符合你的目标:

(?i)(?<=kwl ).*?(?= *\(\))

说明:

  • (?i)表示“忽略大小写”(因此kwl的所有变体都匹配)
  • (?<=kwl )是断言背后的看法
  • .*?是一个不情愿的量词(匹配尽可能少)
  • (?= *\(\))是一个展望未来的断言

环顾四周不捕捉,所以整个匹配是你的目标。

请参阅live demo

如果目标有括号,这也会匹配,如下所示:

kWl including backets ( ) like this ()

如果不支持不情愿的量词,请使用:

(?i)(?<=kwl )(.(?! *\(\))*.(?= *\(\))

答案 1 :(得分:1)

试试这个

^[K|k]wl\s+(\w+)\s?\(\)

https://regex101.com/r/iA1pI3/3

答案 2 :(得分:1)

你很接近,但是!可能没有按你所想的那样在你正在使用的解析器中执行。 ^通常用于许多现代RegEx解析器中的字符类否定:

Kwl[^)]*

您还应该使用反斜杠\来转义括号,因为它们是字符类之外的特殊字符。 (另请注意,stackoverflow的解析器似乎也会在文本中使用反斜杠,以防您使用反斜杠并且想知道为什么它没有显示)

Kwl[^)]*\\) 

如果您特别希望匹配以()结尾,那么一旦找到(,就应该结束贪婪的循环:

Kwl[^(]*\\(\\)

根据应用程序的不同,您可能还想使用[Kk]。区分大小写的解析器将不匹配那些小写的kwl。 (但它确实依赖;我知道Notepad ++由于某种原因是不区分大小写的。)

我能给出的最好的建议是找到你正在使用的RegEx解析器的特定字符集列表。