我认为这应该是一个老问题,然而,经过几个小时的搜索,我在论坛中找不到合适的解决方案。
我正在使用C#,我知道可以使用Regex.Split
和String.Split
方法来实现预期的结果。出于某种原因,我需要使用正则表达式来匹配必需的字段,方法是指定任意分隔符。例如,这是字符串:
#DIV#This#DIV#is#DIV#"A "#DIV#string#DIV#
在这里,#DIV#
是分隔符,将被拆分为:
This
is
"A "
string
如何使用正则表达式匹配这些值?
顺便说一下,前导和尾随#DIV#
也可以忽略,例如,下面的源字符串也应该与上面的结果相同:
#DIV#This#DIV#is#DIV#"A "#DIV#string
This#DIV#is#DIV#"A "#DIV#string#DIV#
This#DIV#is#DIV#"A "#DIV#string
答案 0 :(得分:1)
<强>更新强>:
我认为我找到了一种方法(介意它效率不高!)用正则表达式去除空值。
var splits = Regex.Matches(strIn, @"(?<=#DIV#|^)(?:(?!#DIV#).)+?(?=$|#DIV#)");
请参阅demo on regexstorm(请注意\r?
仅在多线模式下进行演示,在现实生活中使用时不需要它)
原始回答
以下是使用常规Split
的另一种方法:
var strIn = "#DIV#This#DIV#is#DIV#\"A # \"#DIV#string#DIV#";
var splitText = strIn.Split(new[] {"#DIV#"}, StringSplitOptions.RemoveEmptyEntries);
否则,您可以使用正则表达式匹配您需要的字段,然后使用LINQ删除空项:
var spltsTxt2 = Regex.Matches(strIn, @"(?<=#DIV#|^).*?(?=#DIV#|$)").Cast<Match>().Where(p => !string.IsNullOrEmpty(p.Value)).Select(p => p.Value).ToList();
输出:
答案 1 :(得分:0)
您可以使用以下内容进行匹配:
/#?DIV#?/g
并替换为' '
(空格)
但是这有时会给出尾随和前导空格..可以使用String.Trim()
删除编辑1:如果您想匹配字段值,可以使用以下内容:
(?<=(#?DIV#?)|^)[^#]*?(?=(#?DIV#?)|$)
请参阅DEMO
Edit2:在字段中匹配#
的更通用的正则表达式:
(?m)(?<=(^(?!#?DIV#)|(#?DIV#)))(.*?)(?=($|(#DIV#?)))
答案 2 :(得分:0)
$('#area').keyup(function(){
$('.word-counter').text($.trim(this.value.length)+'/100');
})
试试这个。抓住捕获或组。参见演示。