Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 找到一个字符串并更有效地替换它_Asp.net_Regex - Fatal编程技术网

Asp.net 找到一个字符串并更有效地替换它

Asp.net 找到一个字符串并更有效地替换它,asp.net,regex,Asp.net,Regex,情况:我有一个html文件,我需要删除某些部分 例如:该文件包含html:First Name:random information here First Name:random information here 我需要删除所有以“”开头并以“”结尾的文本,这样结果将是: <div style="padding:10px;">First Name:</div><div style="padding:10px;">First Name:</div>

情况:我有一个html文件,我需要删除某些部分

例如:该文件包含html:
First Name:random information here First Name:random information here

我需要删除所有以“
”开头并以“
”结尾的文本,这样结果将是:

<div style="padding:10px;">First Name:</div><div style="padding:10px;">First Name:</div>
名字:名字:
我创建了两个函数来实现这一点,但我根本不认为这是有效的。我有一个40mb的文件,程序大约需要2小时才能完成。有没有更有效的方法?有没有办法使用正则表达式

请参见下面的我的代码:

Public Shared Function String_RemoveText(ByVal startAt As String, ByVal endAt As String, ByVal SourceString As String) As String
    Dim TotalCount As Integer = String_CountCharacters(SourceString, startAt)
    Dim CurrentCount As Integer = 0

RemoveNextString:

    Dim LeftRemoved As String = Mid(SourceString, InStr(SourceString, startAt) + 1, Len(SourceString) - Len(endAt))
    Dim RemoveCore As String = Left(LeftRemoved, InStr(LeftRemoved, endAt) - 1)
    Dim RemoveString As String = startAt & RemoveCore & endAt


    Do
        '    Application.DoEvents()
        SourceString = Replace(SourceString, RemoveString, "")
        If InStr(SourceString, startAt) < 1 Then Exit Do
        GoTo RemoveNextString
    Loop

    Return Replace(SourceString, RemoveString, "")

End Function

Public Shared Sub Files_ReplaceText(ByVal DirectoryPath As String, ByVal SourceFile As String, ByVal DestinationFile As String, ByVal sFind As String, ByVal sReplace As String, ByVal TrimContents As Boolean, ByVal RemoveCharacters As Boolean, ByVal rStart As String, ByVal rEnd As String)

    'CREATE NEW FILENAME
    Dim DateFileName As String = Date.Now.ToString.Replace(":", "_")
    DateFileName = DateFileName.Replace(" ", "_")
    DateFileName = DateFileName.Replace("/", "_")
    Dim FileExtension As String = ".txt"
    Dim NewFileName As String = DirectoryPath & DateFileName & FileExtension
    'CHECK IF FILENAME ALREADY EXISTS
    Dim counter As Integer = 0
    If IO.File.Exists(NewFileName) = True Then
        'CREATE NEW FILE NAME
        Do
            'Application.DoEvents()
            counter = counter + 1
            If IO.File.Exists(DirectoryPath & DateFileName & "_" & counter & FileExtension) = False Then
                NewFileName = DirectoryPath & DateFileName & "_" & counter & FileExtension
                Exit Do
            End If
        Loop
    End If
    'END NEW FILENAME

    'READ SOURCE FILE
    Dim sr As New StreamReader(DirectoryPath & SourceFile)
    Dim content As String = sr.ReadToEnd()
    sr.Close()

    'WRITE NEW FILE
    Dim sw As New StreamWriter(NewFileName)

    'REPLACE VALUES
    content = content.Replace(sFind, sReplace)

    'REMOVE STRINGS
    If RemoveCharacters = True Then content = String_RemoveText(rStart, rEnd, content)


    'TRIM
    If TrimContents = True Then content = Regex.Replace(content, "[\t]", "")

    'WRITE FILE
    sw.Write(content)

    'CLOSE FILE
    sw.Close()
End Sub
Public Shared Function String\u RemoveText(ByVal startAt作为String,ByVal endAt作为String,ByVal SourceString作为String)作为String
Dim TotalCount为整数=字符串\计数字符(SourceString,startAt)
Dim CurrentCount为整数=0
RemoveNextString:
Dim LEFT删除为String=Mid(SourceString,InStr(SourceString,startAt)+1,Len(SourceString)-Len(endAt))
作为字符串的Dim REMOVEVECORE=Left(LEFTREMOVERED,InStr(LEFTREMOVERED,endAt)-1)
Dim RemoveString As String=startAt&RemoveCore&endAt
做
'Application.DoEvents()
SourceString=Replace(SourceString,RemoveString,“”)
如果InStr(SourceString,startAt)<1,则退出Do
转到RemoveNextString
环
返回Replace(SourceString,removesting,“”)
端函数
公共共享子文件\u ReplaceText(ByVal DirectoryPath作为字符串,ByVal SourceFile作为字符串,ByVal DestinationFile作为字符串,ByVal sFind作为字符串,ByVal sReplace作为字符串,ByVal TrimContents作为布尔值,ByVal RemoveCharacters作为布尔值,ByVal rStart作为字符串,ByVal rEnd作为字符串)
'创建新文件名
Dim DateFileName为String=Date.Now.ToString.Replace(“:”,“389;”)
DateFileName=DateFileName.Replace(“,”替换)
DateFileName=DateFileName.Replace(“/”,“quo”)
Dim文件扩展名为String=“.txt”
Dim NewFileName为String=DirectoryPath&DateFileName&FileExtension
'检查文件名是否已存在
作为整数的Dim计数器=0
如果IO.File.Exists(NewFileName)=True,则
'创建新文件名
做
'Application.DoEvents()
计数器=计数器+1
如果IO.File.Exists(DirectoryPath&DateFileName&“\ux”&counter&FileExtension)=False,则
NewFileName=DirectoryPath&DateFileName&“\”计数器&FileExtension
退出Do
如果结束
环
如果结束
'结束新文件名
'读取源文件
Dim sr作为新的StreamReader(DirectoryPath和SourceFile)
以字符串形式标注内容=sr.ReadToEnd()
高级关闭()
'写入新文件
Dim sw作为新StreamWriter(新文件名)
'替换值
content=content.Replace(sFind,sReplace)
'删除字符串
如果RemoveCharacters=True,则content=String\u RemoveText(rStart、rEnd、content)
“修剪
如果TrimContents=True,则content=Regex.Replace(content,[\t],“”)
'写入文件
软件写入(内容)
'关闭文件
sw.Close()
端接头
执行代码的示例(同时删除Chr(13)和Chr(10):
文件\u ReplaceText(tPath.Text,tSource.Text,”,Chr(13)和Chr(10),“”,True,True,tStart.Text,tEnd.Text)

不使用正则表达式解析HTML-它不是一种常规语言。有关一些引人注目的演示,请参阅


使用解析HTML并替换数据。

+1表示不使用正则表达式解析HTML。已有更好的解决方案。从未尝试过HTML Agility Pack,因此我无法回答这个问题。