我試圖提取一段文本之間的文本塊,但未能這樣做。提取模式文本之間的文本塊
文本塊看起來是這樣的
!###################################################################################################
!# Approved : YES
!# REASON: sample reason
!# DEVICE: device1
!# ACL: Acl_sample
access-list <Rule No> extended permMuramat esp <IPaddress> <subnet mask> <IPaddress> <subnet mask> eq <Port Number>
access-list <Rule No> extended permMuramat udp <IPaddress> <subnet mask> <IPaddress> <subnet mask> eq <Port Number>
!##########################################################################
!# REASON:test
!# DEVICE: RTP
!# SECTION : Foundational
access-list <Rule No> permMuramat tcp <IPaddress> <subnet mask> <IPaddress> <subnet mask> eq <Port Number>
!######################################################################################################
!# APPROVED : YES
!# REASON: test1xxx
!# DEVICE: xxx test1 Devices
!# SECTION: test1
!# REQUESTER: [email protected]
!# Exp. Date : 8/2016
access-list <Rule No> permMuramat tcp <IPaddress> <subnet mask> <IPaddress> <subnet mask> eq <Port Number>
access-list <Rule No> permMuramat <IPaddress> <subnet mask> <IPaddress> <subnet mask> eq <Port Number>
基本上搞定一切到一個數組列表。
我試圖遵循一個模式,其中起始索引將以「!#」開頭,下一個字符不是「#」,那麼這將成爲「Startindex」,結束索引將是if下一個字符以「!」開頭並且前面的字符至少有兩個「#」。
失敗草草收場,雖然:(
的文件基本上是一個RTF文件。這是我的代碼如下現在。
string path = @"\\WDMYCLOUD\Public\data.rtf";
string rtfText = File.ReadAllText(path);
RichTextBox rtBox = new RichTextBox { Rtf = rtfText };
var plainText = rtBox.Text;
var charArr = plainText.ToCharArray();
var arrBuffer = new ArrayList();
string tmp = "";
for (int i = 0; i < charArr.Length; i++)
{
int bufferIndex;
var startIndex = bufferIndex = i;
if (charArr[startIndex] == '!' && charArr[startIndex + 1] == '#' &&
charArr[startIndex + 2] != '#' && charArr[startIndex + 2] != ' ')
{
for (int j = bufferIndex; j < charArr.Length; j++)
{
if (charArr[j] == '!' && charArr[j + 1] == '#' && charArr[j + 2] == '#')
{
bufferIndex = j + 2;
for (int charStartIndex = startIndex; charStartIndex <= bufferIndex; charStartIndex++)
{
tmp = tmp + charArr[charStartIndex];
}
arrBuffer.Add(tmp);
tmp = "";
}
arrBuffer.Add(tmp);
tmp = "";
}
}
}
我得到的所有排序混亂的數組列表,而我期待它包含的塊。
預期輸出應該是
First Block:
!# Approved : YES
!# REASON: sample reason
!# DEVICE: device1
!# ACL: Acl_sample
access-list <Rule No> extended permMuramat esp <IPaddress> <subnet mask> <IPaddress> <subnet mask> eq <Port Number>
access-list <Rule No> extended permMuramat udp <IPaddress> <subnet mask> <IPaddress> <subnet mask> eq <Port Number>
Second Block:
!# REASON:test
!# DEVICE: RTP
!# SECTION : Foundational
access-list <Rule No> permMuramat tcp <IPaddress> <subnet mask> <IPaddress> <subnet mask> eq <Port Number>
Third block:
!# APPROVED : YES
!# REASON: test1xxx
!# DEVICE: xxx test1 Devices
!# SECTION: test1
!# REQUESTER: [email protected]
!# Exp. Date : 8/2016
access-list <Rule No> permMuramat tcp <IPaddress> <subnet mask> <IPaddress> <subnet mask> eq <Port Number>
access-list <Rule No> permMuramat <IPaddress> <subnet mask> <IPaddress> <subnet mask> eq <Port Number>
任何人都可以幫助我嗎?
因此,只需刪除'!#{n}',其中'{n}'是#的數量,但如果後面跟着某個東西,則不會。 – jAC
你可以使用ReadAllLines獲取一個字符串數組,並通過數組尋找!###### ........用第一個塊代替每個:,第二個塊:等 – PaulF
正則表達式模式可以[字符串模式= @「^!#{2,}(?= $}」;'](https://regex101.com/r/LcGTUo/1),然後使用它的索引+長度來獲取子字符串的開始然後是下一個匹配的索引或子串尾部的整個字符串的結尾 –