簡體   English   中英

與C#中的換行符(\\ n)匹配的正則表達式

[英]Regex that matches a newline (\n) in C#

好的,這讓我發瘋了...。

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 )用\\n \\\\n\\\\\\n替換\\s不起作用。

請幫助我保持理智!

編輯:一個例子:

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

如果指定RegexOptions.Multiline,則可以使用^$分別匹配行的開頭和結尾。

如果您不想使用此選項,請記住,換行可能是以下任意一項: \\n\\r\\r\\n ,因此,與其僅查找\\n ,不如使用: [\\n\\r]+或更確切地說: (\\n|\\r|\\r\\n)

實際上它可以工作,但選項相反

 RegexOptions.Singleline

您可能在\\ n之前有一個\\ r。 嘗試用(\\ r \\ n)替換\\ s。

如果您嘗試匹配行尾,那么您可能會發現

Regex.Match("string", "regex", RegexOptions.Multiline)

幫助

想想我參加聚會可能有點晚了,但仍然希望這會有所幫助。

我需要在兩個哈希符號之間獲取多個令牌。

示例i / p:

##令牌1 ##
## token2 ##
## token3_a
token3_b
token3_c ##

在我看來,這似乎可行:

var matches = Regex.Matches (mytext, "##(.*?)##", RegexOptions.Singleline);

當然,您可能想用自己的字符替換兩端的雙哈希符號。

HTH。

由於違反直覺,因此可以同時使用“ Multiline和“ Singleline選項。

Regex.Match(input, @"(.+)^(.*)", RegexOptions.Multiline | RegexOptions.Singleline)

第一個捕獲組將包含第一行(包括\\r\\n ),第二個捕獲組將具有第二行。

為什么:

  • Multiline

    ^$匹配每行的開頭和結尾(而不是輸入字符串的開頭和結尾)。

  • Singleline

    句點( . )匹配每個字符(而不是\\n以外的每個字符)

    查看文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM