如何提取文本.使用正则表达式的文本信息

本文关键字:文本 信息 正则表达式 何提 取文本 | 更新日期: 2023-09-27 18:09:52

我有一个下面的示例字符串

ptv.test foo bar cc.any more words

我想要一个正则表达式,可以提取模式text.text。例如,在上面的字符串中,它应该匹配ptv.testcc.any

谢谢

如何提取文本.使用正则表达式的文本信息

您可以使用以下代码:

string s = "ptv.test foo bar cc.any more words";
var matches = Regex.Matches(s, @"'w+'.'w+");
foreach(Match match in matches)
{
    Console.WriteLine(match.Value);
}
输出:

ptv.test

cc.any

'w+'.'w+

(一个或多个字元,句点,一个或多个字元)

[A-Za-z]+'.[A-Za-z]

您需要转义句点,因为它是一个匹配任何

的Regex特殊字符

你的问题模糊一个。答案取决于"文本"的真正含义。以下是一些可能性:

 [a-z]+'.[a-z]+       English lower case letters a..z
 [A-Za-z]+'.[A-Za-z]+ English letters A..Z or a..z
 'p{L}+'.'p{L}+       Any unicode letters
 'w+'.'w+             Any word symbols (letters + digits)
 ...
另一个需要关注的细节是"text"之前/之后是否应该有空格或字符串start/end。例如:for given
 pt???v.test foo bar cc.an!!!y more words

应该认为"v.test""cc.an"是匹配的。如果没有,在所需的模式之前和之后添加'b,例如:

 'b[a-z]+'.[a-z]+'b

实现可以是这样的:

 string source = @"ptv.test foo bar cc.any more words";
 string pattern = @"'b[a-z]+'.[a-z]+'b";
 string[] matches = Regex
   .Matches(source, pattern)
   .Cast<Match>()
   .Select(match => match.Value)
   .ToArray(); // let's organize matches as an array
 // ptv.test
 // cc.any
 Console.Write(String.Join(Environment.NewLine, matches));