如何提取文本.使用正则表达式的文本信息
本文关键字:文本 信息 正则表达式 何提 取文本 | 更新日期: 2023-09-27 18:09:52
我有一个下面的示例字符串
ptv.test foo bar cc.any more words
我想要一个正则表达式,可以提取模式text.text。例如,在上面的字符串中,它应该匹配ptv.test
和cc.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]
您需要转义句点,因为它是一个匹配任何
你的问题模糊一个。答案取决于"文本"的真正含义。以下是一些可能性:
[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));