반응형
알려진 두 값 사이의 문자열 찾기
두 태그 사이의 문자열을 추출 할 수 있어야합니다 (예 : ""에서 "00002 morenonxmldata<tag1>0002</tag1>morenonxmldata
").
C # 및 .NET 3.5를 사용하고 있습니다.
정규식이 필요없는 솔루션 :
string ExtractString(string s, string tag) {
// You should check for errors in real-world code, omitted for brevity
var startTag = "<" + tag + ">";
int startIndex = s.IndexOf(startTag) + startTag.Length;
int endIndex = s.IndexOf("</" + tag + ">", startIndex);
return s.Substring(startIndex, endIndex - startIndex);
}
Regex regex = new Regex("<tag1>(.*)</tag1>");
var v = regex.Match("morenonxmldata<tag1>0002</tag1>morenonxmldata");
string s = v.Groups[1].ToString();
또는 (주석에서 언급했듯이) 최소 하위 집합을 일치 시키려면 :
Regex regex = new Regex("<tag1>(.*?)</tag1>");
Regex
클래스가 System.Text.RegularExpressions
네임 스페이스에 있습니다.
Regex
지연 일치 및 역 참조를 사용 하는 접근 방식 :
foreach (Match match in Regex.Matches(
"morenonxmldata<tag1>0002</tag1>morenonxmldata<tag2>abc</tag2>asd",
@"<([^>]+)>(.*?)</\1>"))
{
Console.WriteLine("{0}={1}",
match.Groups[1].Value,
match.Groups[2].Value);
}
두 개의 알려진 값 사이에서 내용을 추출하는 것은 나중에 유용 할 수 있습니다. 따라서 확장 방법을 만드는 것은 어떻습니까? 내가하는 일은 짧고 간단하다 ...
public static string GetBetween(this string content, string startString, string endString)
{
int Start=0, End=0;
if (content.Contains(startString) && content.Contains(endString))
{
Start = content.IndexOf(startString, 0) + startString.Length;
End = content.IndexOf(endString, Start);
return content.Substring(Start, End - Start);
}
else
return string.Empty;
}
string input = "Exemple of value between two string FirstString text I want to keep SecondString end of my string";
var match = Regex.Match(input, @"FirstString (.+?) SecondString ").Groups[1].Value;
향후 참조를 위해 http://www.mycsharpcorner.com/Post.aspx?postID=15 에서이 코드 스 니펫을 찾았 습니다. 다른 "태그"를 검색해야하는 경우 매우 잘 작동합니다.
public static string[] GetStringInBetween(string strBegin,
string strEnd, string strSource,
bool includeBegin, bool includeEnd)
{
string[] result ={ "", "" };
int iIndexOfBegin = strSource.IndexOf(strBegin);
if (iIndexOfBegin != -1)
{
// include the Begin string if desired
if (includeBegin)
iIndexOfBegin -= strBegin.Length;
strSource = strSource.Substring(iIndexOfBegin
+ strBegin.Length);
int iEnd = strSource.IndexOf(strEnd);
if (iEnd != -1)
{
// include the End string if desired
if (includeEnd)
iEnd += strEnd.Length;
result[0] = strSource.Substring(0, iEnd);
// advance beyond this segment
if (iEnd + strEnd.Length < strSource.Length)
result[1] = strSource.Substring(iEnd
+ strEnd.Length);
}
}
else
// stay where we are
result[1] = strSource;
return result;
}
나는 전후 데이터를 제거합니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
namespace testApp
{
class Program
{
static void Main(string[] args)
{
string tempString = "morenonxmldata<tag1>0002</tag1>morenonxmldata";
tempString = Regex.Replace(tempString, "[\\s\\S]*<tag1>", "");//removes all leading data
tempString = Regex.Replace(tempString, "</tag1>[\\s\\S]*", "");//removes all trailing data
Console.WriteLine(tempString);
Console.ReadLine();
}
}
}
RegEx없이, 필수 값 검사 포함
public static string ExtractString(string soapMessage, string tag)
{
if (string.IsNullOrEmpty(soapMessage))
return soapMessage;
var startTag = "<" + tag + ">";
int startIndex = soapMessage.IndexOf(startTag);
startIndex = startIndex == -1 ? 0 : startIndex + startTag.Length;
int endIndex = soapMessage.IndexOf("</" + tag + ">", startIndex);
endIndex = endIndex > soapMessage.Length || endIndex == -1 ? soapMessage.Length : endIndex;
return soapMessage.Substring(startIndex, endIndex - startIndex);
}
public string between2finer(string line, string delimiterFirst, string delimiterLast)
{
string[] splitterFirst = new string[] { delimiterFirst };
string[] splitterLast = new string[] { delimiterLast };
string[] splitRes;
string buildBuffer;
splitRes = line.Split(splitterFirst, 100000, System.StringSplitOptions.RemoveEmptyEntries);
buildBuffer = splitRes[1];
splitRes = buildBuffer.Split(splitterLast, 100000, System.StringSplitOptions.RemoveEmptyEntries);
return splitRes[0];
}
private void button1_Click(object sender, EventArgs e)
{
string manyLines = "Received: from exim by isp2.ihc.ru with local (Exim 4.77) \nX-Failed-Recipients: rmnokixm@gmail.com\nFrom: Mail Delivery System <Mailer-Daemon@isp2.ihc.ru>";
MessageBox.Show(between2finer(manyLines, "X-Failed-Recipients: ", "\n"));
}
참고URL : https://stackoverflow.com/questions/1717611/find-a-string-between-2-known-values
반응형
'Programing' 카테고리의 다른 글
양식 제출을 클릭하면 Google Analytics에서 이벤트 추적 (0) | 2020.11.26 |
---|---|
El Capitan으로 업그레이드 한 후 잘못된 활성 개발자 경로 오류 (0) | 2020.11.26 |
콘솔 출력을 txt 파일에 쓰는 방법 (0) | 2020.11.26 |
asp.net MVC EditorFor에서 생성 한 HTML ID를 얻는 방법 (0) | 2020.11.26 |
빌드 전 단계로 Hudson에서 다른 작업을 트리거하려면 어떻게해야합니까? (0) | 2020.11.25 |