为什么我不能用这种模式删除“ [restr =戸]”

时间:2019-11-11 23:27:06

标签: c# regex

我有这样的字符串:

"
[2][n]
  shutter; window shutter

,と|戸,1266970,(Y, 5, 3, Y, [1][n]
  [restr=戸]
  door (esp. Japanese-style)"

我正在尝试删除[restr=戸]

使用以下代码:

 Regex regex = new Regex(@"(\n  )?\[(see|note|ant|restr|syn)=[^\]]*\]]");
 var m1 = regex.Replace(m, "");

但是当我查看m1时,字符串仍然存在。

谁能看到为什么不删除字符串?

2 个答案:

答案 0 :(得分:1)

您需要删除最后一个],因为这将需要第二次关闭],并且我还建议同时匹配CRLF或LF结尾(如果您可以使用Windows或Unix行结尾),并增强水平空白部分:

var m1 = Regex.Replace(m, @"(?:\r?\n[\p{Zs}\t]*)?\[(?:see|note|ant|restr|syn)=[^]]*]", "");

请参见regex demo

详细信息

  • (?:\r?\n[\p{Zs}\t]*)?-的可选序列
  • \[-一个[字符
  • (?:see|note|ant|restr|syn)-seenoteantrestrsyn字符序列
  • =-一个=字符
  • [^]]*-除]之外的0个或更多字符
  • ]-一个]字符。

答案 1 :(得分:0)

我的猜测是,最好在<form> <fieldset> … <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> <input type=submit value=Submit> </fieldset> </form>模式下进行替换,并使用一些简单的表达式,也许类似于

<!DOCTYPE html>
	<html>
	<head>
		<meta charset="utf-8"/>
		<title></title>
	</head>
	<body>
	<div id="myDiv">
	   <table>
	        <tr>
	            <td>
	                <span>40 (14)</span>
	            </td>
	        </tr>
	        <tr>
	            <td>
	                <span>24 (19)</span>
	            </td>
	        </tr>
	        <tr>
	            <td>
	                <span>24</span>
	            </td>
	        </tr>
	   </table>

	</div>

	<script type="text/javascript">
		var nodes = document.querySelectorAll("#myDiv td span");
		for(var i = 0; i < nodes.length; ++i){
				var node = nodes[i];
				var text = node.innerText;
				var openIndex = -1;
				var closeIndex = -1;
				for(var j = 0; j < text.length; ++j){
					if(text[j] === "("){
							openIndex = j;
					}
					if(text[j] === ")"){
						closeIndex = j;
					}
				}
				var str = "";
				if(openIndex > -1 && closeIndex > -1){
						for(var j = 0; j < text.length; ++j){
							if(j == openIndex){
								str += '<span style="color: red;">';
								str += text[j];		
							}else if(j == closeIndex){
								str += text[j];
								str += "</span>";
							}else{
								str += text[j];
							}

										

						}
						node.innerHTML = str;
				}
				

		}
	</script>

	</body>
	</html>

RegEx Demo

测试1

submitButton.parentNode.insertBefore(foobar, submitButton)

测试2

s

C# Demo

输出

\s*\[\s*\b(?:see|note|ant|restr|syn)\b\s*=[^\]]*\]

如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。


RegEx电路

jex.im可视化正则表达式:

enter image description here