我想在一個正則表達式通過後獲取值。樣品是在一次正則表達式通過後評估第二個正則表達式
My test string is ##[FirstVal][SecondVal]##
我要搶FirstVal
和SecondVal
。
我試過\#\#(.*?)\#\#
模式,但只返回[FirstVal][SecondVal]
。
是否可以評估一個正則表達式的結果並應用另一個正則表達式?
我想在一個正則表達式通過後獲取值。樣品是在一次正則表達式通過後評估第二個正則表達式
My test string is ##[FirstVal][SecondVal]##
我要搶FirstVal
和SecondVal
。
我試過\#\#(.*?)\#\#
模式,但只返回[FirstVal][SecondVal]
。
是否可以評估一個正則表達式的結果並應用另一個正則表達式?
在.NET中,您可以使用捕捉棧抓住所有的重複捕獲。
一個正則表達式,如
##(?:\[([^][]*)])+##
會發現##
,然後匹配並捕獲的字符串中的任何量等[
+ texts-with-no-brackets
+ ]
並且所有這些texts-with-no-brackets
將被推入一個CaptureCollection是與捕獲組相關聯1.
在C#中,你可以使用如下荷蘭國際集團代碼:
var s = "My test string is ##[FirstVal][SecondVal]##";
var myvalues = Regex.Matches(s, @"##(?:\[([^][]*)])+##")
.Cast<Match>()
.SelectMany(m => m.Groups[1].Captures
.Cast<Capture>()
.Select(t => t.Value));
Console.WriteLine(string.Join(", ", myvalues));
心靈,你可以做a similar thing與的Python的PyPI regex
模塊。
這會對您使用的編程語言有所不同,因爲模塊可能略有不同。我用我的解決方案使用了python,因爲你沒有指定你使用的是什麼語言,你可以在兩邊使用兩個括號#並使用轉義字符使正則表達式不匹配方括號(即\[(\w+)\]
。凡在蟒蛇重模塊\w
代表a-zA-Z0-9_
的外延。
import re
data = "##[FirstVal][SecondVal]##"
x = re.search(r'##\[(\w+)\]\[(\w+)\]', data)
print(x.groups())
它打印('FirstVal', 'SecondVal')
它根本不工作。它返回'## [FirstVal] [SecondVal]'作爲結果。 –
我的解決方案在** Python 3.x **中工作得很好,我不知道你的正則表達式的行爲。 –
有解決方法,但什麼是你的正則表達式的味道?你可以很容易地在C#中用CaptureCollection,PCRE和其他一些程序來做到這一點,你可以使用'\ G'運算符來設置自定義邊界。 –
@RomanPerekhrest:我想從字符串## [FirstVal] [SecondVal] ##匹配FirstVal和SecondVal。 –
@WiktorStribiżew你可以用C#提供一個例子。我對C#非常熟悉。 –