我需要能够检查带有|的模式在他们中。例如,对于像“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
我有点选择,我应该怎么用? 我的意思是这是一个非常基本的正则表达式我知道,但我出于某种原因没有得到它。
答案 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的方式很奇怪,你必须加倍所有反斜杠。我怀疑你的第一次尝试是正确的,但你在解决旧问题时输入了一个新问题,因为你遇到了关于单个反斜杠的另一个问题。