簡體   English   中英

C#正則表達式匹配文本直到特定字符

[英]C# Regex Match text until specific character

我試圖得到一個正則表達式來驗證/提取字符串中的所有字符,直到第一美元。 如果字符串沒有任何美元,則應與整個字符串匹配,但不起作用。

我測試的是:

System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match("12345678$1", "/[^\$]*/");

我期望得到的是match.value => 12345678如果傳遞的字符串是例如123456781,則它應該返回所有內容。

怎么了?

致以最誠摯的問候。

您忘了逃避\\

Match match = Regex.Match("12345678$1", "[^\\$]*");
Console.WriteLine(match.Value);
match = Regex.Match("123456781", "[^\\$]*");
Console.WriteLine(match.Value);

輸出:

12345678
123456781

正如dolgsthrasir指出的那樣,您無需在正則表達式中轉義$ ,因此"[^$]*"就可以了。

試試這個

System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match("12345678$1", "([^\\$]+)");

提取的字符串應為組1。

從我得到的結果來看,您正在使用的表達式將匹配由0個或多個任何非$實例組成的字符串。

您可以嘗試以下操作:

        string sample = "1234578";
        Regex regex = new Regex("(.+?)(\\$|$)");
        if (regex.IsMatch(sample))
        {
            Match match = regex.Match(sample);
            Console.WriteLine(match.Groups[1]);
        }

它將匹配並提取任何數字,直到$ (表示為\\\\$ ),否則將提取字符串的末尾(表示為$ ),以先到者為准。

您不需要正則表達式,只需使用IndexOfSubString

var str = "12345678$1";
int index = str.IndexOf("$");
if(index < 0)
    return str;
else
    return str.Substring(0, index);

System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match("12345678$1", "(.+)\\$");

您的結果將在match.Groups [1]中

暫無
暫無

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

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