[解决]用正则表达式模式在已知字符串之间提取数据 [英] [Solved] extract data between known strings with regex pattern
问题描述
我想在两个已知字符串之间提取数据。
模式1 = [[
模式2 =]]
我想要第一次出现pattern1和最后一次出现pattern2之间的数据
数据= [[jhsa,dgvfjhvfhl [[ks,dbfvhbf]] jmsaefvkjhera ]] mhsdgvgcvds [[MSNDvcgsdv h]]< JSVDjhgs]]
我的输出:MSNDvcgsdv h]]< JSVDjhgs]]
预期输出:[[jhsa,dgvfjhvfhl [[ks,dbfvhbf]] jmsaefvkjhera]] mhsdgvgcvds [[MSNDvcgsdv h]]< JSVDjhgs
请帮帮我。
提前致谢
我尝试了什么:
var Datamsg = Regex.Match(Data,@\ [\ [(。*)\] \],RegexOptions.RightToLeft).Groups [1] .Value;
I want to extract data between two know strings.
pattern 1 = [[
pattern 2 = ]]
I want data between first occurrence of the pattern1 and last occurrence of pattern2
Data = [[jhsa,dgvfjhvfhl[[ks,dbfvhbf]]jmsaefvkjhera]]mhsdgvgcvds[[MSNDvcgsdv h]]<JSVDjhgs]]
My Output : MSNDvcgsdv h]]<JSVDjhgs]]
Expected Output : [[jhsa,dgvfjhvfhl[[ks,dbfvhbf]]jmsaefvkjhera]]mhsdgvgcvds[[MSNDvcgsdv h]]<JSVDjhgs
please help me with this.
Thanks in advance
What I have tried:
var Datamsg = Regex.Match(Data, @"\[\[(.*)\]\]", RegexOptions.RightToLeft).Groups[1].Value;
推荐答案
问题是<正则表达式中的code>。*?:?
表示懒惰并且会导致正则表达式在第一次停止]]它遇到了,但你想要最后一个。
删除问号(所以替换。*?
通过。*
),这将使正则表达式贪婪并尽可能消耗。
The problem is the.*?
in your regex: the?
means "lazy" and will cause the regex to stop at the first ]] it comes across, but you want the last.
Remove the question mark (so replace.*?
by.*
), this will make the regex "greedy" and consume as much as possible.
我感谢RegEx;在这种情况下,使用String方法非常简单:
I appreciate RegEx; in this case, it's pretty simple to use String methods:
const string twoOpenBrackets = "[[";
const string twoCloseBrackets = "]]";
// in some method:
int ndx = data.IndexOf(twoOpenBrackets);
if(ndx < 0 || data == String.Empty) throw new ArgumentException("no [[");
data = data.Substring(ndx);
ndx = data.LastIndexOf(twoCloseBrackets);
if (ndx < 2) throw new ArgumentException("no ]]");
data = data.Substring(0, ndx);
这篇关于[解决]用正则表达式模式在已知字符串之间提取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!