当前位置: 首页 > 知识库问答 >
问题:

如何用 vb.net 替换此字符串的某些部分?

颜英博
2023-03-14

我正在寻找创建正则表达式的帮助,以便我可以用锚标签替换文本。文本来自SQL字段(VarChar(max)),格式如下:

在上面的文本中,我需要将1994年以后的所有章节替换为锚标签。例如,98、553、568和300都将被替换。下面的代码查找1994年的整个文本,例如c.98,但是我不确定如何替换该文本中的“98”。

Public Shared Function ReplaceChapterTag1(lang As String) As String
    Dim l As String = lang
    Dim r As Regex = New Regex("199[4-9][/,][/ ][/c]*[/.][/ ][0-9]+(?:\.[0-9]*)?")

    Dim applyEvaluator As MatchEvaluator = New MatchEvaluator(AddressOf applyCodeLink)
    l = r.Replace(l, applyEvaluator)

    Return l

End Function

Private Shared Function applyCodeLink(ByVal m As Match) As String
    Dim r As Regex = New Regex("^[0-9]*[\-][0-9]*")
    Dim str As String = m.ToString
    Dim strReturn As String = ""

    Dim match As Match = r.Match(str)
    If match.Success Then
        strReturn = str
    Else
        strReturn = "<a href='link?id=" & m.Value & "'>" & m.Value & "</a>"
    End If

    Return strReturn
End Function

共有1个答案

年良骏
2023-03-14

我不确定如何替换文本中的“98”。

您可以使用< code >正则表达式。替换。但是,您构建的正则表达式需要像这样进行调整:

(?<=199[4-9][^;]+)(?<=[/c]*[/.][/\x20]|,\x20)(\d+(?:\.\d*)?)(?=[,;)])
' Input
Dim InputText As String = "..." ' Lorem ipsum...

' Regex
Dim r As Regex = New Regex( _
      "(?<=199[4-9][^;]+)" + _
      "(?<=[/c]*[/.][/\x20]|,\x20)" + _
      "(\d+(?:\.\d*)?)" + _
      "(?=[,;)])", _
    RegexOptions.IgnoreCase _
    Or RegexOptions.CultureInvariant _
    Or RegexOptions.Compiled _
    )

' This is the replacement string
Dim Replacement As String = "<a href='link?id=$1'>$1</a>"

'' Replace the matched text in the InputText using the replacement pattern
Dim Result As String = r.Replace(InputText,Replacement)

Lorem ipsum Dolor sat amet, consecterur adipice elit, se do eiusmod温度附带劳工和多洛尔大额(1954年,c.12; 1968年,c.300; 1994年,c.98)

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua (1998, cc. 553, 568; 2001, cc. 17, 300)

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua (1954, c. 12; 1968, c. 300; 1994, c. <a href='link?id=98'>98</a>)

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua (1998, cc. <a href='link?id=553'>553</a>, <a href='link?id=568'>568</a>; 2001, cc. 17, 300)

基本上,我的答案中经过优化的正则表达式背后的想法是查找一个或多个数字(\d),这些数字前面有AND,后面有一些字符。

我冒昧地简化并更清楚地说明了最初的正则表达式。主要是,我替换了:

  • [0-9]\d
  • (空格字符)\x20
 类似资料:
  • 问题内容: 如何用另一部分替换字符串的特定部分? 输入字符串: 如何用其他方式更改字符串中的全部? 我认为我需要一个循环,但是我不确定如何使用它。 问题答案: 或者更精确地回答您的问题:

  • 我的应用程序将userdata.dll的路径存储在字符串中。 我需要转换这个字符串: 转换为: 所有的< code>\都需要复制,这与路径有多少个< code>\无关。 像这样: 对此有任何帮助吗?我正在尝试遵循这个问题: 如何用VB.NET替换这根弦的一部分? 但无法找到如何制作这个Regex。。。

  • 问题内容: 给定以下字符串 这是所需的输出:( 每个长号,无论长度如何,都应替换为姓氏) 这里的问题是,可能有很多可变长度(最大长度可以<20)… 我尝试了 多种 方法,并采用了以下方法。 有没有办法有效地做到这一点..任何建议将是最欢迎的 问题答案: 首先删除多个下划线,然后进行替换。 这是一种方法:

  • 问题内容: 我有一些带有数字和英文单词的字符串,我需要通过找到它们并将其替换为该单词的本地化版本,将它们翻译成我的母语。您知道如何轻松实现替换字符串中的单词吗? 谢谢 编辑: 我已经尝试过(字符串“ to”的一部分应替换为“ xyz”): 但这不起作用… 问题答案: 它正在工作,但是不会修改调用者对象,而是返回一个新的String。 因此,您只需要将其分配给新的String变量或自身即可: 要么

  • 问题内容: 我正在尝试获取字符串的前10个字符,并想用替换空格。 我有 但是我不确定下一步该怎么做。 我想要绳子 这是对字符串的测试。 成为 this_is_th 问题答案: 只需使用str_replace: 您可以在上一个和呼叫之后执行此操作,如下所示: 但是,如果您想花哨的话,可以一行完成: