簡體   English   中英

查找並替換字符串中的特定字符

[英]Find and replace specific characters in a string

假設我有一個名為str的字符串變量,其中包含以下值:

~Header 1~
*Content 1*
*Content 2*

~Header 2~
*Content 1*
*Content 2*
*Content 3*

~Header 3~
*Content 1*

我想要的是將特殊字符~替換為<b>Header</b> ,將*替換為<p>Content</p>這樣將導致:

<b>Header 1</b>
<p>Content 1</p>
<p>Content 2</p>

<b>Header 2</b>
<p>Content 1</p>
<p>Content 2</p>
<p>Content 3</p>

<b>Header 3</b>
<p>Content 1</p>

然后刪除NewLine並將其替換為<br/>並使其僅一行。

到目前為止,我只需要刪除NewLine並將其替換為<br/> ,然后使其僅一行即可。

預期結果

<b>Header 1</b><br/><p>Content 1</p><br/><p>Content 2</p><br/><br/><b>Header 2</b><br/><p>Content 1</p><br/><p>Content 2</p><br/><p>Content 3</p><br/><br/><b>Header 3</b><br/><p>Content 1</p>

我的當前代碼

Dim str As String = TextBox.Text ' The String Value is inputted from TextBox with Multiline property

Dim newStr As String = Regex.Replace(str, vbLf, "<br/>")
newStr = Regex.Replace(str, vbCr, "<br/>")
MessageBox.Show(newStr)

當前結果

~Header 1~<br/>*Content 1*<br/>*Content 2*<br/><br/>~Header 2~<br/>*Content 1*<br/>*Content 2*<br/>*Content 3*<br/><br/>~Header 3~<br/>*Content 1*

有人可以幫我嗎?

假設“〜”和“ *”字符始終出現在行的開頭和結尾,則可以使用以下方法

  • 使用String.Split創建一個數組,其中每行str都有一個元素。
  • 循環瀏覽並進行替換。
  • 使用String.Join在每個項目之間使用<br>重建字符串。

     Dim str As String = "~Header~" & vbCrLf & "*content*" Dim lines() As String = str.Split(vbCrLf.ToCharArray, StringSplitOptions.RemoveEmptyEntries) For i As Integer = 0 To lines.Length - 1 If lines(i).StartsWith("~") And lines(i).EndsWith("~") Then lines(i) = "<b>" & lines(i).Substring(1, lines(i).Length - 2) & "</b>" End If If lines(i).StartsWith("*") And lines(i).EndsWith("*") Then lines(i) = "<p>" & lines(i).Substring(1, lines(i).Length - 2) & "</p>" End If Next Dim strNew As String = String.Join("<br>", lines) 

[根據評論進行編輯]

如果要為每個空白行添加<br> ,則需要將StringSplitOptions更改為StringSplitOptions.None 為此,我們需要確切地知道哪些字符分隔了行(vbCR,vbLf,vbCrLf),如果用vbCrLf分隔行,則下面的代碼應該起作用。

    Dim str As String = "~Header~" & vbCrLf & "*content*"
    Dim lines() As String = str.Split({vbCrLf}, StringSplitOptions.None)
    For i As Integer = 0 To lines.Length - 1
        If lines(i).StartsWith("~") And lines(i).EndsWith("~") Then
            lines(i) = "<b>" & lines(i).Substring(1, lines(i).Length - 2) & "</b>"
        End If

        If lines(i).StartsWith("*") And lines(i).EndsWith("*") Then
            lines(i) = "<p>" & lines(i).Substring(1, lines(i).Length - 2) & "</p>"
        End If
    Next
    Dim strNew As String = String.Join("<br>", lines)

正則表達式對於如下所示很有用:

Dim output As String = Regex.Replace(input, "~([^~]*)~", "<b>$1</b>")
output = Regex.Replace(output, "\*([^*]*)\*", "<p>$1</p>")
output = Regex.Replace(output, "\r?\n", "<br/>")

如果可以使用單個模式進行整個操作,但是您需要為它提供一個客戶MatchEvaluator方法,它將更加復雜。 因此,只要您不介意每次通過多個模式(使用不同的替換項)運行它,它就會變得越來越簡單。

您可以使用Regex發揮自己的優勢。

Function ReplaceSpecial(ByVal text As String) As String
    text = Regex.Replace(text, "^~([^~]+?)~", "<b>$1</b>", RegexOptions.Multiline)
    text = Regex.Replace(text, "^\*([^*]+?)\*", "<p>$1</p>", RegexOptions.Multiline)
    Return text
End Function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM