【发布时间】:2014-03-24 20:33:39
【问题描述】:
我的完整问题标题太长,但应该在这里提问:
如何在字符串中找到特定子字符串的所有实例,以说明可能位于子字符串任一侧的空格和特殊字符
我的意思是这个。我正在 VB.Net 中编写一个 SQL 代码格式化辅助程序。当我跟进真正写得不好的 SQL 时,这个程序会有所帮助。一个例子是(请忽略这里的语法错误,我不擅长用 SQL 编写糟糕的代码):
if exists(
select *
from dbo.table
where field1 = (if exists (select field1
from dbo.table1
where field2 = '123')
select field1 from table2)
我的计划仍处于早期阶段。我已经确定了大部分关键字,并编写了将它们置于正确大小写格式的代码。所以在上面的错误代码示例中,所有选择都将是 Select。为此,我创建了一个数组形式的关键字列表,并在以下函数中使用该数组:
Private Function FindAndReplace(ByVal findWhat As String, _
ByVal replaceWith As String, ByVal focusLine As String) As String
focusLine = Microsoft.VisualBasic.Strings.Replace(focusLine, findWhat, _
replaceWith, 1, -1, Constants.vbTextCompare)
Return focusLine
End Function
好消息是这对 Select 之类的词非常有效。 If、Go、On 和 End 等词更具挑战性。如果我有 Send 这个词,它将用 SEnd 替换它,因为 End 是一个关键字。在许多这些情况下,我可以通过将较小的单词放在较大的单词之前来解释这一点。我已将 Send 添加为关键字,因为该词出现在我们系统上的用户消息中的次数。
我似乎无法解释像 On、If 或 Go 这样的词。我考虑过搜索“Go”、“On”、“)Go”、“On(”等,但有时 Go 将成为行中的第一个词……或唯一的。
我需要的是一种 VB.Net 方法,可以在字符串中搜索给定子字符串(例如 If)的所有实例。我在想我会检查它是否是字符串中的第一个单词,或者查看它是否被空格或特殊字符的任何组合包围(或者没有被其他字母和下划线等包围)。我会更新那些符合我要求的,而不要管其他人。
我对如何做到这一点尚无定论,我真的需要一些帮助。
【问题讨论】:
-
“我不擅长用 SQL 编写糟糕的代码” 真可惜!
-
也许使用 split() 和 join() 并遍历单词数组并分别作用于每个单词
-
where field2 = 'Please select "OK"'这样的事情会怎样?简单的搜索和替换并非在所有情况下都有效。一个可靠的算法必须做一些基本的语法分析。 -
@Friostro - 我可以试试。现在我看到它是由其他人写的,这似乎是显而易见的答案……doh
-
@Oliverier Jacot-Descombes - 关于一揽子搜索和替换方法的局限性,我同意你的看法。就像我说的,我还处于这个过程的早期阶段。我一直在尝试使用 -- 方法来解释像 cmets 这样简单的事情。当该行以 -- 开头时,程序运行良好。当 -- 排在后面时,它每次都会失败。当我的日程安排有时间时,我会对此进行调整,但这更像是一个爱好项目,对我的日常工作有所帮助。我的主要技能是 SQL,我只是想扩展我的工具包。
标签: vb.net string replace substring