Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中,什么是正确的正则表达式来获取两个单词之间的单词,但排除边界?_C#_.net_Regex - Fatal编程技术网

在C#中,什么是正确的正则表达式来获取两个单词之间的单词,但排除边界?

在C#中,什么是正确的正则表达式来获取两个单词之间的单词,但排除边界?,c#,.net,regex,C#,.net,Regex,给定以下字符串: 使用运行时23s从数据库中加载数据:schema.table 我想从字符串中提取schema.table。当前的re 我目前正在使用此模式::(\s+)(\s+)(\s+)来自,此注释提供了帮助: 我想知道如何修改此正则表达式以从匹配中排除:和 您可以使用lookarounds: (?<=:\s+)(.+?)(?=\s+from) (?使用匹配但不捕获(?:),它为匹配提供了一个锚定(即:和\s),但不会将其捕获为最终输出 然后,您只需从我命名为text的组捕获中获取

给定以下字符串:

使用运行时23s从数据库中加载数据:schema.table

我想从字符串中提取
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所以给我一个更好的方法