[英]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);
}
}
}
您可以提取括號之間的數字,而不必擔心使用以下正則表達式提取捕獲組。
(?<=\()\d+(?=\)$)
解釋:
(?<=\\()
: 正面查找 for (
意味着匹配將在 a (
之后開始,而不將其捕獲到結果中。
\\d+
:捕獲一行中的所有數字,直到找到非數字字符
(?=\\)$)
:積極展望)
與行結束意味着匹配將在 a )
之前結束,行結束而不捕獲)
和行結束到結果。
編輯:如果數字可以在不在行尾的括號內,請從正則表達式中刪除$
以修復匹配。
var match = Regex.Match(string, @".*\((\d*)\)");
這里有三個選項供您選擇。
第一個使用最簡單的模式,此外還使用 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.