【发布时间】:2016-09-30 12:54:18
【问题描述】:
我有以下示例字符串
ptv.test foo bar cc.any more words
我想要一个可以提取模式 text.text 的正则表达式。例如在上面的字符串中它应该匹配ptv.test和cc.any
谢谢
【问题讨论】:
-
[A-Za-z]+\.[A-Za-z]+?或[a-z]+\.[a-z]+,如果不允许使用大写字母
我有以下示例字符串
ptv.test foo bar cc.any more words
我想要一个可以提取模式 text.text 的正则表达式。例如在上面的字符串中它应该匹配ptv.test和cc.any
谢谢
【问题讨论】:
[A-Za-z]+\.[A-Za-z]+?或[a-z]+\.[a-z]+,如果不允许使用大写字母
您可以使用以下代码:
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)
...
另一个需要关注的细节是“文本”应该在 空格 或字符串开始/结束之前/之后。例如。给定的
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));
【讨论】: