【发布时间】:2014-03-18 16:23:54
【问题描述】:
在包含数值的字符串中,例如:
6.1、6.1.1、6.1.2。
我想查找(并替换)整个单词 "6.1" 并忽略以 "6.1" 开头的其他单词。我尝试在我的 reg 表达式中使用 \b:
Dim OrginalString as String = "Sample text with numeric values starting with 6.1 followed by 6.1.1, 6.1.2 "
Dim wordToFind as String = "6.1"
Dim pattern As String = [String].Format("\b({0})\b", wordToFind)
Dim ret As String = Regex.Replace(OrginalString, pattern, "1234",RegexOptions.IgnoreCase)
但它会替换所有以"6.1" 开头的数字“单词”。结果如下:
ret = "Sample text with numeric values starting with 1234 followed by 1234.1, 1234.2 "
VB 或 C# 中的解决方案对我来说没问题。
成功了。 :) 谢谢 Casimir et Hippolyte!
【问题讨论】:
-
欢迎来到 StackOverflow。如果某个答案对您有用,您应该将其标记为有帮助(通过单击它旁边的向上箭头)和/或正确(通过单击它旁边的复选标记)。
-
在不知道
whole word的含义的情况下无法执行此操作。与您不想匹配的内容有何区别? -
如果要重新定义单词的含义,就不能使用单词边界(\b)。
-
这些是逗号分隔的字段吗?如果是这样,它应该是
Dim pattern As String = [String].Format("(?<=,|^)({0})(?=,|$)", wordToFind)其他任何东西最终都会失败。没关系,阅读其余部分。 -
因为您的模式包含正则表达式字符,所以它没有达到您的预期。它将愉快地匹配 6X1,因为点将匹配任何字符。如果您的模式中可能有正则表达式字符,您可能需要转义它们。或者,您是否考虑过 String.Replace()?