我不知道我做錯了什麼。我有以下內容:C#正則表達式提取後捕獲組號只有
(?:[A-Z]{2}\d{2}\s)
這是因爲我的字符串總是以兩個高位字母字符和兩個數字開頭。後來我有一個文字混合數據,我只希望我想借此AB12 (1,2,3 words, 4,5,6,7,8,9)
並獲得該AB12 (1,2,3,4,5,6,7,8,9)
的數字,我試圖
(?:[A-Z]{2}\d{2}\s)([0-9]+)
然而,這是行不通的。爲了實現我的目標,我甚至關閉了嗎?
我不知道我做錯了什麼。我有以下內容:C#正則表達式提取後捕獲組號只有
(?:[A-Z]{2}\d{2}\s)
這是因爲我的字符串總是以兩個高位字母字符和兩個數字開頭。後來我有一個文字混合數據,我只希望我想借此AB12 (1,2,3 words, 4,5,6,7,8,9)
並獲得該AB12 (1,2,3,4,5,6,7,8,9)
的數字,我試圖
(?:[A-Z]{2}\d{2}\s)([0-9]+)
然而,這是行不通的。爲了實現我的目標,我甚至關閉了嗎?
要刪除這不是一個數字,一個逗號的任何字符,你可以使用[^,\d\s]
字符類,並使用(?<=\([^()]*)
和(?=[^()]*\))
lookarounds斷言括號內的位置:
(?<=\([^()]*)\s*[^,\d]+(?=[^()]*\))
\s*
有助於擺脫非數字值之前的可選(0+)空格。
如果需要精確的與您最初的子模式的情況下,添加:
(?<=^[A-Z]{2}\d{2}\s+\([^()]*)\s*[^,\d]+(?=[^()]*\))
^^^^^^^^^^^^^^^^^
一個C# demo:
using System;
using System.IO;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
var str = "AB12 (1,2,3 words, 4,5,6,7,8,9)";
var pat = @"(?<=^[A-Z]{2}\d{2}\s+\([^()]*)\s*[^,\d]+(?=[^()]*\))";
var res = Regex.Replace(str, pat, string.Empty);
Console.WriteLine(res);
}
}
謝謝,這正是我所需要的。我從來沒有想過這一點。 – JeremyA1
請注意,您可以進一步將其調整爲僅刪除沒有數字的字塊,並將其保留爲數字:['(?<= \([^()] *)\ s * \ b [^,\ W \ d] + \ b(?= [^()] * \))'](http://regexstorm.net/tester?p=(%3F%3C%3D%5C(%5B%5E()%圖5d *)%5CS *%5CB%5B%5E%2C%5CW%5CD%5D%2B%5CB(%3F%3D%5B%5E()%5D *%5C))I = AB12 +(1%2C2% 2C3 + wor6ds +字%2C + 4%2C5 2C6%%2C7 2C8%2C9%))。 –
這個問題不清楚。有什麼要求?現在,我只能提出一個非常醜陋的['([AZ] {2} \ d {2} \ s \()(?:\ s *,?\ s *(?:(\ d +)\ b | \ W +))* \)'](http://regexstorm.net/tester?p=(%5BA-Z%5D%7B2%7D%5CD%7B2%7D%5CS%5C()(%3F%3A %5CS *%2C%3F%5CS *(%3F%3A(%5CD%2b)的%5CB%7C%5CW%2B))*%5C)I = AB12 +(1%2C2%2C3 +字%2C + 4 %2C5 2C6%%2C7 2C8%2C9%))。 –
我需要從括號中刪除非數字。 – JeremyA1