[解决]用正则表达式模式在已知字符串之间提取数据 [英] [Solved] extract data between known strings with regex pattern

查看:87
本文介绍了[解决]用正则表达式模式在已知字符串之间提取数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在两个已知字符串之间提取数据。

模式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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆