我正在寻找帮助创建一个正则表达式,以便我可以用锚标记替换文本。文本来自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“。
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发布于 2013-12-09 22:11:12
解决方案
我不知道怎样才能把案文中的"98“替换掉。
您可以使用Regex.Replace。但是,您构建的正则表达式需要按以下方式进行调优:
(?<=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 -同坐,圣洁 Lorem ipsum dolor ut,consectetur adipisicing,sed do eiusmod tempor不再是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+),在前面加上一些字符。
我冒昧地简化并澄清了最初的regexp。主要是,我取代了:
[0-9]与\d(space char)与\x20https://stackoverflow.com/questions/20368487
复制相似问题