我的正则表达式有以下条件: 当字符串不为空时,它应包含单词“internal”
换句话说:
"<link linktype='internal' id='{F88AE8AE-69C4-4E31-95BF-73B110FEE63A}' />" --> OK
"<link linktype='external' id='{F88AE8AE-69C4-4E31-95BF-73B110FEE63A}' />" --> NOK
"test" --> NOK
"" --> OK
我知道可以使用^$
来检查空字符串
或者是一个非空字符串:^\s*\S
我的内部检查只是:linktype=\'internal\'
(例如)
将它们聚集在一起是困难的部分。我一直坚持这个,但它并没有像预期的那样:
(?(?=^\s*\S)linktype=\"internal\"|^$)
有人可以帮忙吗?
答案 0 :(得分:2)
既然你提到了C#,你可以试试这个:
if(str.Length == 0 || str.Contains("internal"))
它很有效,很简单。
答案 1 :(得分:1)
您可以尝试(^$)|(^.*linktype=\"internal\".*$)
空字符串或带有文本linktype="internal"
的字符串。
答案 2 :(得分:1)
在这种特殊情况下,您可以使用:
^(.*linktype=['"]internal['"].*)?$
否则,分别为每个案例编写一个正则表达式然后将它们括在括号中并使用'或'将它们包含在单个表达式中更容易:
(^$)|(^.*linktype=['"]internal['"].*$)
这将匹配^$
或^.*linktype=['"]internal['"].*$
。
答案 3 :(得分:0)
像
这样的东西(^$)|(^.*linktype=\"internal\".*$)
- 托马斯
答案 4 :(得分:0)
这样的事情应该这样做:
^.*linktype='(internal|)'.*$
答案 5 :(得分:0)
"<link linktype='internal' id='{F88AE8AE-69C4-4E31-95BF-73B110FEE63A}' />" --> OK
"<link linktype='external' id='{F88AE8AE-69C4-4E31-95BF-73B110FEE63A}' />" --> NOK
"test" --> NOK
"" -->
如果linktype ='internal'匹配,你并不关心linktype ='internal'之前和之后的内容,你无论如何都会得到一个匹配:
(^$)|(linktype='internal')
答案 6 :(得分:0)
也许我应该添加自己的答案。到目前为止,答案使用的捕获组略高一些。要对非捕获组使用“或”条件:
(?:^$)|(?:linktype=['\"]internal['\"])
第二部分不需要锚点,因为RE的定义将匹配字符串中没有锚点的任何地方。
此外,要在RE中使用“和”条件,您只需将规则连接在一起即可。这就是上面的RE实际形成的方式。它是(锚点开始和锚点结束)或(l
AND i
和n
... AND字符集['“]和i
AND ...等...)
答案 7 :(得分:0)
string regex = "^(?:\\n|.*linktype=([\'\"])internal\\1.*\\n)";
var options = RegexOptions.Multiline);
var reg = new Regex(regex, options);