正则表达式使所有给定单词旁边的单词

时间:2019-03-20 22:21:47

标签: c# regex

我需要一个正则表达式来立即捕获我提供的所有单词旁边的单词。

例句:

  

user =“ panda”试图访问resource =“ system”

要捕获的字词:熊猫和系统(即“用户”和“资源”一词旁边的字词)

当前,我使用此正则表达式(?<=name=\")(.*?)(?=\";)来返回名称“ panda”。我正在寻找一个可以捕获上述句子中的用户和资源的查询。

有人可以帮助进行正则表达式查询吗?

2 个答案:

答案 0 :(得分:1)

只有一个简单的带有惰性匹配的正则表达式就可以完成工作

user="(.*?)".*resource="(.*?)"

如果您需要以任何顺序匹配两个以上的单词,它将变得更加复杂,在这种情况下,我根本不会使用RegEx,您宁愿为此创建一个词法分析器。只需创建一个将首先标记该句子的类/过程,然后解析器即可获取所需的信息

答案 1 :(得分:1)

由于.NET的正则表达式支持非固定长度的Lookbehinds,因此您只需在非捕获组中添加所需的所有单词并使用交替:

(?<=(?:user|resource)=\").*?(?=\")

Demo

您还可以使用以下方法摆脱前瞻性攻击:

(?<=(?:user|resource)=\")[^"]*

Demo #2