在C#中,什么是正确的正则表达式来获取两个单词之间的单词,但排除边界?
给定以下字符串: 使用运行时23s从数据库中加载数据:schema.table 我想从字符串中提取在C#中,什么是正确的正则表达式来获取两个单词之间的单词,但排除边界?,c#,.net,regex,C#,.net,Regex,给定以下字符串: 使用运行时23s从数据库中加载数据:schema.table 我想从字符串中提取schema.table。当前的re 我目前正在使用此模式::(\s+)(\s+)(\s+)来自,此注释提供了帮助: 我想知道如何修改此正则表达式以从匹配中排除:和 您可以使用lookarounds: (?<=:\s+)(.+?)(?=\s+from) (?使用匹配但不捕获(?:),它为匹配提供了一个锚定(即:和\s),但不会将其捕获为最终输出 然后,您只需从我命名为text的组捕获中获取
schema.table
。当前的re
我目前正在使用此模式::(\s+)(\s+)(\s+)来自
,此注释提供了帮助:
我想知道如何修改此正则表达式以从匹配中排除
:
和 您可以使用lookarounds:
(?<=:\s+)(.+?)(?=\s+from)
(?使用匹配但不捕获(?:)
,它为匹配提供了一个锚定(即:
和\s
),但不会将其捕获为最终输出
然后,您只需从我命名为text
的组捕获中获取以下文本即可轻松提取:
string text = "Loaded data from: schema.table from database with runtime 23s.";
string pattern = @"(?::\s)(?<Text>[^\s]+)";
// Outputs "schema.table"
Console.WriteLine (Regex.Match(text, pattern).Groups["Text"].Value);
string text=“使用运行时23s从数据库中加载数据:schema.table。”;
字符串模式=@“(?::\s)(?[^\s]+)”;
//输出“schema.table”
Console.WriteLine(Regex.Match(text,pattern).Groups[“text”].Value);
否则,如果没有命名捕获,它将是组中的索引1。您可以将其保存在一个变量中并进行剪切:而且从另一个角度来看,除了比赛中的:
和之外还有什么大不了的呢?您已经大量捕获了您想要的内容。此外,您选择的答案在尝试任何时候都会使用捕获缓冲区还有什么。这是怎么回事?而且,你在正则表达式中不说schema.table
,你说从这里:\s+从上到下一直到\s+from
,表单太多了,但你不说是否可以。@sln谢谢你的反馈。数据始终以搜索模式的形式存在,但schema.table
这只是一种识别我所需数据的通用方法,但它从来不是schema.table
。有时它是dbo.word
,或w.test
,等等。@sln足够公平-不幸的是,大多数人都不擅长正则表达式(包括我自己),所以当我们看到一些有效的东西时,我们会非常高兴。@sln所以给我一个更好的方法