5

テキスト内の別の文字列の後に特定の文字列を削除する必要があります。いくつかの URL を含むテキスト ファイルがあり、URL の後に操作の RESULT があります。操作の RESULT を削除し、URL だけを残す必要があります。

テキストの例:

http://website1.com/something 結果:OK(登録のみモードオン)

http://website2.com/something 結果: 登録された問題は 100% (SOMETHING ELSE) その他の文字列。

http://website3.com/something 結果: エラー: "Âíèìàíèå, îáíàðóæåíà îøèáêà - Ìåñòî æèòëüñòâà ñîäåðæèò íåäîïóñòèìûå ê

Result:から始まるすべての文字列を削除する必要があるため、残りの文字列は次のようにする必要があります。

http://website1.com/something

http://website2.com/something

http://website3.com/something

結果なし: .........

結果はランダムに生成されるため、 RESULTの後に何があるか正確にはわかりません。

4

8 に答える 8

12

1つのオプションは、他の回答に従って正規表現を使用することです。もう1つはIndexOf、次のSubstringとおりです。

int resultIndex = text.IndexOf("Result:");
if (resultIndex != -1)
{
    text = text.Substring(0, resultIndex);
}

個人的には、非常にシンプルで理解しやすい文字列操作をいくつか実行するだけで済む場合は、正規表現を使用するよりも簡単に正しく処理できることがわかります。実際のパターン (少なくとも 3 つ、次に 1 つ) に取り掛かると、もちろん、正規表現はより便利になります。

于 2012-09-03T12:57:02.833 に答える
1

これには正規表現を使用します。

例:

var r = new System.Text.RegularExpressions.Regex("Result:(.)*");
var result = r.Replace("Action Result:1231231", "");

次に、結果に「アクション」が表示されます。

于 2012-09-03T12:57:08.087 に答える
1

このコードで試すことができます-string.Replaceを使用して

var pattern = "Result:";
var lineContainYourValue = "jdfhkjsdfhsdf Result:ljksdfljh"; //I want replace test
lineContainYourValue.Replace(pattern,"");
于 2012-09-03T12:52:48.777 に答える
1
string input = "Action2 Result: Problems registered 100% (SOMETHING ELSE) Other Strings; ";
string pattern = "^(Action[0-9]*) (.*)$";
string replacement = "$1";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, replacement);

$1マッチActionXXを維持するために使用します。

于 2012-09-03T12:54:21.530 に答える
0

Linq アプローチ:

IEnumerable<String> result = System.IO.File
    .ReadLines(path)
    .Where(l => l.StartsWith("Action") && l.Contains("Result"))
    .Select(l => l.Substring(0, l.IndexOf("Result")));
于 2012-09-03T12:57:13.077 に答える
0

おそらくこれに沿った何か?

string line;
using ( var reader = new StreamReader ( File.Open ( @"C:\temp\test.txt", FileMode.Open ) ) )
   using ( var sw = new StreamWriter(File.Open( @"C:\Temp\test.edited.txt", FileMode.CreateNew ) ))
       while ( (line = reader.ReadLine()) != null )
          if(!line.StartsWith("Result:")) sw.WriteLine(line); 
于 2012-09-03T12:58:21.683 に答える
0

ウェブサイトのみが必要な現在の例を考えると、正規表現はスペースに一致します。

var fileLine = "http://example.com/sub/     random text";
Regex regexPattern = new Regex("(.*?)\\s");
var websiteMatch = regexPattern.Match(fileLine).Groups[1].ToString();
Debug.Print("!" + websiteMatch + "!");

テキスト ファイルの各行に対して繰り返します。正規表現の説明: .* は何にでも一致し、? (括弧) は一致をグループに入れ、\\s は空白に一致します。

于 2012-09-03T13:52:54.880 に答える
0

この種の処理には RegEx を使用できます。

using System.Text.RegularExpressions;

private string ParseString(string originalString)
{
    string pattern = ".*(?=Result:.*)";
    Match match = Regex.Match(originalString, pattern);
    return match.Value;
}
于 2012-09-03T12:59:58.077 に答える