正则表达式为“|”

时间:2010-03-29 15:09:06

标签: c# regex

我需要能够检查带有|的模式在他们中。例如,对于像“dtest | test”这样的字符串,像d*|*t这样的表达式应该返回true。

我不是正则表达英雄,所以我只尝试了几件事,比如:

Regex Pattern = new Regex("s*\|*d"); //unable to build because of single backslash
Regex Pattern = new Regex("s*|*d"); //argument exception error
Regex Pattern = new Regex(@"s*\|*d"); //returns true when I use "dtest" as input, so incorrect
Regex Pattern = new Regex(@"s*|*d"); //argument exception error
Regex Pattern = new Regex("s*\\|*d"); //returns true when I use "dtest" as input, so incorrect
Regex Pattern = new Regex("s*" + "\\|" + "*d"); //returns true when I use "dtest" as input, so incorrect
Regex Pattern = new Regex(@"s*\\|*d"); //argument exception error

我有点选择,我应该怎么用? 我的意思是这是一个非常基本的正则表达式我知道,但我出于某种原因没有得到它。

6 个答案:

答案 0 :(得分:5)

在正则表达式中,*表示“零或更多(前面的模式)”,例如a*表示零个或多个a(xy)*表示格式为xyxyxyxy...的匹配。

要匹配任何字符,您应该使用.*,即

Regex Pattern = new Regex(@"s.*\|.*d");

(另外,|表示“或”)

此处.将匹配任何字符 [1] ,包括|。为避免这种情况,您需要使用字符类

new Regex(@"s[^|]*\|[^d]*d");

此处[^x]表示“x以外的任何字符”。

您可以阅读http://www.regular-expressions.info/tutorial.html以了解有关RegEx的更多信息。

[1]:新行\n除外。但是,如果您通过了Singleline选项,.将匹配\n。那么这是更先进的东西......

答案 1 :(得分:1)

|内的char class将按字面意思处理,因此您可以尝试使用正则表达式:

[|]

答案 2 :(得分:0)

s.*\|.*d怎么样? 您尝试的问题是,您编写了类似s*的内容 - 这意味着:匹配任意数量的s(包括0)。您需要在我的示例中使用.来定义s后面的字符。您只能将\w用于字母数字字符。

答案 3 :(得分:0)

试试这个。

string test1 = "dtest|test";
string test2 = "apple|orange";
string pattern = @"d.*?\|.*?t";

Console.WriteLine(Regex.IsMatch(test1, pattern));
Console.WriteLine(Regex.IsMatch(test2, pattern));

答案 4 :(得分:0)

Regex Pattern = new Regex(@"s*\|*d");可以工作,除了| *表示“0或更多管道”。所以你可能想要Regex Pattern = new Regex(@"s.*\|.*d");

答案 5 :(得分:0)

在Javascript中,如果你构造
var regex = /somestuff\otherstuff/;, 你可以按照预期的那样反斜杠。但是如果你使用不同的语法构造完全相同的东西 var regex = new Regex("somestuff\\otherstuff");
然后由于解析Javascript的方式很奇怪,你必须加倍所有反斜杠。我怀疑你的第一次尝试是正确的,但你在解决旧问题时输入了一个新问题,因为你遇到了关于单个反斜杠的另一个问题。