我正在尝试将字符串中的两个文本占位符之间的文本隔离
以下3个字母之间的任何内容,以()结尾 - 括号
示例
['8', '10', '918', '101010']
我尝试了很多组合,包括
Kwl ThisString ()
Kwl String_2()
kwl string_3_as_well()
kwl maybethisverylongstringaswell()
答案 0 :(得分:2)
这符合你的目标:
(?i)(?<=kwl ).*?(?= *\(\))
说明:
(?i)
表示“忽略大小写”(因此kwl
的所有变体都匹配)(?<=kwl )
是断言背后的看法.*?
是一个不情愿的量词(匹配尽可能少)(?= *\(\))
是一个展望未来的断言环顾四周不捕捉,所以整个匹配是你的目标。
请参阅live demo。
如果目标有括号,这也会匹配,如下所示:
kWl including backets ( ) like this ()
如果不支持不情愿的量词,请使用:
(?i)(?<=kwl )(.(?! *\(\))*.(?= *\(\))
答案 1 :(得分:1)
答案 2 :(得分:1)
你很接近,但是!
可能没有按你所想的那样在你正在使用的解析器中执行。 ^
通常用于许多现代RegEx解析器中的字符类否定:
Kwl[^)]*
您还应该使用反斜杠\
来转义括号,因为它们是字符类之外的特殊字符。 (另请注意,stackoverflow的解析器似乎也会在文本中使用反斜杠,以防您使用反斜杠并且想知道为什么它没有显示)
Kwl[^)]*\\)
如果您特别希望匹配以()
结尾,那么一旦找到(
,就应该结束贪婪的循环:
Kwl[^(]*\\(\\)
根据应用程序的不同,您可能还想使用[Kk]
。区分大小写的解析器将不匹配那些小写的kwl。 (但它确实依赖;我知道Notepad ++由于某种原因是不区分大小写的。)
我能给出的最好的建议是找到你正在使用的RegEx解析器的特定字符集列表。