Как удалить адрес электронной почты из строки? - PullRequest
0 голосов
/ 20 февраля 2019

Итак, у меня есть строка, и я хочу удалить адрес электронной почты, если он есть.

Например:

Это некоторый текст и онпродолжается, как этот
, пока иногда адрес электронной почты не появляется asd@asd.com

также еще немного текста здесь и здесь.

Я хочу это в результате.

Это некоторый текст, и он продолжается, как этот
, пока иногда адрес электронной почты не появляется [email_removed]

также еще немного текста здесь и здесь.

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
}

Проблема в том, что я теряю все разрывы строк и получаю только пробелы.Как мне перестроить строку так, чтобы она выглядела так же, как и до удаления адреса электронной почты?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Если по какой-то причине RegExReplace не всегда работает для вас, вы можете попробовать это:

text =
(
This is some text and it continues like this
until sometimes an email adress shows up asd@asd.com.

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
}
0 голосов
/ 20 февраля 2019

Это выглядит довольно сложно, почему бы не использовать RegExReplace вместо этого?

string =
(
This is some text and it continues like this
until sometimes an email adress shows up asd@asd.com

also some more text here and here.
)

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

MsgBox, % newWordString

Не стесняйтесь сделать шаблон таким же простым или сложным , как выхочу, в зависимости от ваших потребностей, но RegExReplace должен это сделать.

...