在C#中匹配换行符(\ n)的正则表达式
好的,这个让我疯了……我有一个字符串,这样就形成了:
var newContent = string.Format("({0})\n{1}", stripped_content, reply)
newContent将显示如下:
(旧文)
新文本
我需要一个正则表达式,用括号括起来的括号中的文本和换行符。
我能想到的最好的是:
const string regex = @"^(\(.*\)\s)?(?.*)"; var match= Regex.Match(original_content, regex); var stripped_content = match.Groups["capture"].Value;
这有效,但我想专门匹配换行符( \n
),而不是任何空格( \s
)用\n
\\n
或\\\n
替换\s
\\\n
不起作用。
请帮我保持理智!
编辑:一个例子:
public string Reply(string old,string neww) { const string regex = @"^(\(.*\)\s)?(?.*)"; var match= Regex.Match(old, regex); var stripped_content = match.Groups["capture"].Value; var result= string.Format("({0})\n{1}", stripped_content, neww); return result; } Reply("(messageOne)\nmessageTwo","messageThree") returns : (messageTwo) messageThree
如果指定RegexOptions.Multiline,则可以分别使用^
和$
来匹配行的开头和结尾。
如果您不想使用此选项,请记住新行可能是以下任何一行: \n
, \r
, \r\n
,所以不应只查看\n
,而应该使用类似的东西: [\n\r]+
,或更确切地说: (\n|\r|\r\n)
。
实际上它有效,但有相反的选择即
RegexOptions.Singleline
🙂
您可能会在\ n之前有一个\ r \ n。 尝试用(\ r \ n)替换\ s。
如果您正在尝试匹配行结尾,那么您可能会发现
Regex.Match("string", "regex", RegexOptions.Multiline)
帮助
想想我可能会有点迟到,但仍然希望这会有所帮助。
我需要在两个哈希标志之间获得多个令牌。
示例i / p:
## token1 ##
## token2 ##
## token3_a
token3_b
token3_c ##
这似乎适用于我的情况:
var matches = Regex.Matches (mytext, "##(.*?)##", RegexOptions.Singleline);
当然,您可能希望用自己的字符替换两端的双哈希符号。
HTH。