使用正则表达式

时间:2015-06-18 16:12:54

标签: c# .net

如何使用正则表达式查找字符串是否与[sometextornumber] is a [sometextornumber].之类的模式匹配 例如,如果输入为This is a test,则输出应为thistest

我在想([a-zA-Z0-9]) is a([a-zA-Z0-9])之类的东西,但看起来我离开了正确的道路。

4 个答案:

答案 0 :(得分:0)

试试这个:

([a-zA-Z0-9])+ is a ([a-zA-Z0-9])+

编辑:

a后需要一个空格,因为它是另一个词。没有+,它只会匹配第一个单词的最后一个字母,直到最后一个单词的第一个字母。 +将匹配()中的1个或更多内容,因此在这种情况下,整个单词。

答案 1 :(得分:0)

你的问题是为了抓住句子的第一个和最后一个字。如果这是您将要感兴趣的全部,那么这种模式就足够了:

"^(\\w+)|(\\w+)$"

模式分解:

^ indicates the beginning of a line    
^(\\w+) capture group for a word at the beginning of the line. This is equivalent to [a-zA-Z0-9]+, where the + says you want a one or more letters and numbers.
| acts as an OR operator in Regex
$ indicates the end of a line
(\\w+)$ capture group for a word at the end of the line. This is equivalent to [a-zA-Z0-9]+, where the + says you want a one or more letters and numbers.

此模式允许您忽略第一个和最后一个单词之间的内容,因此它不关心“是一个”,并为您提供一个捕获组。

用法:

string data = "This is going to be a test";
Match m = Regex.Match(data, "^(\\w+)|(\\w+)$");
while (m.Success)
{
    Console.WriteLine(m.Groups[0]);
    m = m.NextMatch();
}

结果:

This
test

如果你真的只对句子的第一个和最后一个词感兴趣,你也不需要打扰正则表达式。只需用空格分割句子并抓住数组的第一个和最后一个元素。

string[] dataPieces = data.Split(' ');
Console.WriteLine(dataPieces[0]);
Console.WriteLine(dataPieces[dataPieces.Length - 1]);

结果是一样的。

参考文献:

https://msdn.microsoft.com/en-us/library/hs600312(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspx

答案 2 :(得分:0)

如果您希望匹配特定模式,例如“This”或“Test”,您可以简单地进行不区分大小写的字符串比较。

从你的问题来看,我不确定你是否一定需要一个正则表达式。

答案 3 :(得分:0)

这是一个快速的LINQpad:

var r = new Regex("(.*) is a (.*)");
var match = r.Match("This is a test");
match.Groups.OfType<Group>().Skip(1).Select(g=>g.Value).Dump();

输出:

IEnumerable<String> (2 items)
This 
test