Harpo
Harpo

Reputation: 187

How remove email-address from string?

So, I have a string and I want to remove the e-mail adress from it if there is one.

As example:

This is some text and it continues like this
until sometimes an email adress shows up [email protected]

also some more text here and here.

I want this as a result.

This is some text and it continues like this
until sometimes an email adress shows up [email_removed]

also some more text here and here.

cleanFromEmail(string)
{
    newWordString = 
    space := a_space
    Needle = @
    wordArray := StrSplit(string, [" ", "`n"])
    Loop % wordArray.MaxIndex()
    {

        thisWord := wordArray[A_Index]


        IfInString, thisWord, %Needle%
        {
            newWordString = %newWordString%%space%(email_removed)%space%
        }
        else
        {
            newWordString = %newWordString%%space%%thisWord%%space%
            ;msgbox asd
        }
    }

    return newWordString
}

The problem with this is that I end up loosing all the line-breaks and only get spaces. How can I rebuild the string to look just like it did before removing the email-adress?

Upvotes: 6

Views: 4013

Answers (2)

Relax
Relax

Reputation: 10636

If for some reason RegExReplace doesn't always work for you, you can try this:

text =
(
This is some text and it continues like this
until sometimes an email adress shows up [email protected].

also some more text here and here.
)

MsgBox, % cleanFromEmail(text)

cleanFromEmail(string){
    lineArray := StrSplit(string, "`n")
    Loop % lineArray.MaxIndex()
    {
        newLine := ""
        newWord := ""
        thisLine := lineArray[A_Index]
        If InStr(thisLine, "@")
        {
            wordArray := StrSplit(thisLine, " ")
            Loop % wordArray.MaxIndex()
            {
                thisWord := wordArray[A_Index]
                {
                    If InStr(thisWord, "@")
                    {
                        end := SubStr(thisWord, 0)
                        If end in ,,,.,;,?,!
                            newWord := "[email_removed]" end ""
                        else
                            newWord := "[email_removed]"
                    }
                    else
                        newWord := thisWord
                }
                newLine .= newWord . " " ; concatenate the outputs by adding a space to each one
            }
            newLine :=  trim(newLine) ; remove the last space from this variable
        }
        else
            newLine := thisLine
        newString .= newLine . "`n"
    }
    newString := trim(newString)
    return newString
}

Upvotes: 0

CertainPerformance
CertainPerformance

Reputation: 371193

That looks rather complicated, why not use RegExReplace instead?

string =
(
This is some text and it continues like this
until sometimes an email adress shows up [email protected]

also some more text here and here.
)

newWordString := RegExReplace(string, "\S+@\S+(?:\.\S+)+", "[email_removed]")

MsgBox, % newWordString

Feel free to make the pattern as simple or as complicated as you want, depending on your needs, but RegExReplace should do it.

Upvotes: 4

Related Questions