var newContent = string.Format("({0})\n{1}", stripped_content, reply)
newContent将显示如下:
(旧文)
新文本
我需要一个正则表达式,用括号中的括号和换行符来删除括号内的文本。
我能想到的最好的是:
const string regex = @"^(\(.*\)\s)?(?<capture>.*)";
var match= Regex.Match(original_content, regex);
var stripped_content = match.Groups["capture"].Value;
这有效,但我想要专门匹配换行符(\n
),而不是任何空格(\s
)
用\s
\n
或\\n
替换\\\n
不起作用。
请帮助我保持理智!
编辑:一个例子:
public string Reply(string old,string neww)
{
const string regex = @"^(\(.*\)\s)?(?<capture>.*)";
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
答案 0 :(得分:58)
如果指定RegexOptions.Multiline,则可以分别使用^
和$
来匹配行的开头和结尾。
如果您不想使用此选项,请记住新行可以是以下任意一项:\n
,\r
,\r\n
,因此不要只查看对于\n
,您应该使用类似:[\n\r]+
的内容,或更确切地说:(\n|\r|\r\n)
。
答案 1 :(得分:17)
实际上它有效,但有相反的选择,即
RegexOptions.Singleline
答案 2 :(得分:4)
你可能会在\ n之前有一个\ r \ n。尝试用(\ r \ n)替换\ s。
答案 3 :(得分:3)
如果您正在尝试匹配行结尾,那么您可能会找到
Regex.Match("string", "regex", RegexOptions.Multiline)
帮助
答案 4 :(得分:3)
想想我可能有点迟到了,但仍然希望这会有所帮助。
我需要在两个哈希符号之间获得多个令牌。
示例i / p:
## token1 ##
## token2 ##
## token3_a
token3_b
token3_c ##
这似乎适用于我的情况:
var matches = Regex.Matches (mytext, "##(.*?)##", RegexOptions.Singleline);
当然,您可能希望用自己的字符替换两端的双重哈希符号。
HTH。
答案 5 :(得分:1)
实际上是反直观的,您可以同时使用Multiline
和Singleline
选项。
Regex.Match(input, @"(.+)^(.*)", RegexOptions.Multiline | RegexOptions.Singleline)
第一个捕获组将包含第一行(包括\r
和\n
),第二个捕获组将具有第二行。
Multiline
:
^
和$
匹配每行的开头和结尾(而不是输入字符串的开头和结尾)。
Singleline
:
句点(
.
)匹配每个字符(而不是\n
之外的每个字符)