首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用vb.net替换该字符串的某些部分?

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

Stack Overflow用户
提问于 2013-12-04 06:24:10
回答 1查看 1K关注 0票数 0

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

Lorem ipsum dolor -同坐,圣洁

Lorem ipsum dolor ut,consectetur adipisicing,sed do eiusmod tempor不再是labore et dolore magna aliqua (1998,cc.553,568;2001,c. 300)

在上述案文中,我需要用锚标签取代1994年之后的所有章节。例如,98,553,568和300都将被取代。下面的代码找到了1994年的全部文本,例如c.98,但我不知道如何替换该文本中的"98“。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-09 22:11:12

解决方案

我不知道怎样才能把案文中的"98“替换掉。

您可以使用Regex.Replace。但是,您构建的正则表达式需要按以下方式进行调优:

代码语言:javascript
复制
(?<=199[4-9][^;]+)(?<=[/c]*[/.][/\x20]|,\x20)(\d+(?:\.\d*)?)(?=[,;)])

描述

样本代码

代码语言:javascript
复制
' 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 -同坐,圣洁 Lorem ipsum dolor ut,consectetur adipisicing,sed do eiusmod tempor不再是labore et dolore magna aliqua (1998,cc.553,568;2001,cc。17,300)

输出

代码语言:javascript
复制
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+),在前面加上一些字符。

我冒昧地简化并澄清了最初的regexp。主要是,我取代了:

  • [0-9]\d
  • (space char)\x20
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20368487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档