GCiri
GCiri

Reputation: 59

Remove String After Determinate String

I need to remove certain strings after another string within a piece of text. I have a text file with some URLs and after the URL there is the RESULT of an operation. I need to remove the RESULT of the operation and leave only the URL.

Example of text:


http://website1.com/something                                        Result: OK(registering only mode is on) 

http://website2.com/something                                    Result: Problems registered 100% (SOMETHING ELSE) Other Strings; 

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

I need to remove all strings starting from Result: so the remaining strings have to be:

http://website1.com/something

http://website2.com/something

http://website3.com/something

Without Result: ........

The results are generated randomly so I don't know exactly what there is after RESULT:

Upvotes: 5

Views: 8659

Answers (8)

WhoIsRich
WhoIsRich

Reputation: 4163

Given your current example, where you want only the website, regex match the spaces.

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

Repeating for each line in your text file. Regex explained: .* matches anything, ? makes the match ungreedy, (brackets) puts the match into a group, \\s matches whitespace.

Upvotes: 0

Aghilas Yakoub
Aghilas Yakoub

Reputation: 28970

You can try with this code - by using string.Replace

var pattern = "Result:";
var lineContainYourValue = "jdfhkjsdfhsdf Result:ljksdfljh"; //I want replace test
lineContainYourValue.Replace(pattern,"");

Upvotes: 1

Tim Schmelter
Tim Schmelter

Reputation: 460138

A Linq approach:

IEnumerable<String> result = System.IO.File
    .ReadLines(path)
    .Where(l => l.StartsWith("Action") && l.Contains("Result"))
    .Select(l => l.Substring(0, l.IndexOf("Result")));

Upvotes: 0

Nikola Malešević
Nikola Malešević

Reputation: 1858

You can use RegEx for this kind of processing.

using System.Text.RegularExpressions;

private string ParseString(string originalString)
{
    string pattern = ".*(?=Result:.*)";
    Match match = Regex.Match(originalString, pattern);
    return match.Value;
}

Upvotes: 0

Simon Wilson
Simon Wilson

Reputation: 10424

Something along the lines of this perhaps?

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); 

Upvotes: 0

Vitaliy Nesterenko
Vitaliy Nesterenko

Reputation: 358

Use Regex for this.

Example:

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

Then you will have "Action" in the result.

Upvotes: 1

Jon Skeet
Jon Skeet

Reputation: 1500675

One option is to use regular expressions as per some other answers. Another is just IndexOf followed by Substring:

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

Personally I tend to find that if I can get away with just a couple of very simple and easy to understand string operations, I find that easier to get right than using regex. Once you start going into real patterns (at least 3 of these, then one of those) then regexes become a lot more useful, of course.

Upvotes: 12

LaGrandMere
LaGrandMere

Reputation: 10359

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);

You use $1 to keep the match ActionXX.

Upvotes: 1

Related Questions