如何使用正则表达式查找字符串是否与[sometextornumber] is a [sometextornumber].
之类的模式匹配
例如,如果输入为This is a test
,则输出应为this
和test
。
我在想([a-zA-Z0-9]) is a([a-zA-Z0-9])
之类的东西,但看起来我离开了正确的道路。
答案 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