簡體   English   中英

使用 RegEx 從字符串中提取特定部分

[英]Use RegEx to extract specific part from string

我有像這樣的字符串

"Augustin Ralf (050288)"
"45 Max Müller (4563)"
"Hans (Adam) Meider (056754)"

我正在尋找一個正則表達式來提取括號中的最后一部分,例如上面字符串的結果:

"050288"
"4563"
"056754"

我試過

 var match = Regex.Match(string, @".*(\(\d*\))");

但我也得到了結果的括號。 有沒有辦法提取字符串並在沒有括號的情況下獲取它?

請使用正則表達式 - \\(([^)]*)\\)[^(]*$ 。這是按預期工作的。我在這里測試

准確地滿足您的要求,您正在尋找

\(([^()]+)\)$

這將捕獲括號之間的任何內容(不是嵌套的!),可能是數字或其他任何內容,並將它們錨定到字符串的末尾。 如果最后碰巧有空格,請使用

\(([^()]+)\)\s*$

C#這可能是

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"\(([^()]+)\)$";
        string input = @"Augustin Ralf (050288)
45 Max Müller (4563)
Hans (Adam) Meider (056754)
";
        RegexOptions options = RegexOptions.Multiline;
        
        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}

在 regex101.com 上查看演示

您可以提取括號之間的數字,而不必擔心使用以下正則表達式提取捕獲組。

(?<=\()\d+(?=\)$)

演示

解釋:

(?<=\\() : 正面查找 for (意味着匹配將在 a (之后開始,而不將其捕獲到結果中。

\\d+ :捕獲一行中的所有數字,直到找到非數字字符

(?=\\)$) :積極展望)與行結束意味着匹配將在 a )之前結束,行結束而不捕獲)和行結束到結果。

編輯:如果數字可以在不在行尾的括號內,請從正則表達式中刪除$以修復匹配。

 var match = Regex.Match(string, @".*\((\d*)\)");

https://regex101.com/r/Wk9asY/1

這里有三個選項供您選擇。

第一個使用最簡單的模式,此外還使用 Trim 方法。

第二個使用捕獲所需的值到組,然后從組中獲取它。

第三個使用 Lookbehind 和 Lookahead。

var inputs = new string[] {
    "Augustin Ralf (050288)", "45 Max Müller (4563)", "Hans (Adam) Meider (056754)"
};


foreach (var input in inputs)
{
    var match = Regex.Match(input, @"\(\d+\)");
    Console.WriteLine(match.Value.Trim('(', ')'));
}
Console.WriteLine();


foreach (var input in inputs)
{
    var match = Regex.Match(input, @"\((\d+)\)");
    Console.WriteLine(match.Groups[1]);
}
Console.WriteLine();


foreach (var input in inputs)
{
    var match = Regex.Match(input, @"(?<=\()\d+(?=\))");
    Console.WriteLine(match.Value);
}
Console.WriteLine();

暫無
暫無

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

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