使用Excel VBA
我不确定你是否可以用正则表达式做到这一点,但我想要做的就是像
这样的刺痛" ThisIsAn ExampleString"
找到小写字母的每个实例,后面紧跟一个大写字母,然后在其中插入一个管道。
所以最后的结果就像
" This | Is | An Example | String"
所以我猜测模式是" [a-z] [A-Z]"
我开始认为我正在用正则表达式咆哮错误的树,应该尝试某种功能。
编辑:
感谢下面给出答案的所有人,你给了我解决方案。
对于其他读这篇文章的人来说,这就是我最终的目标:
Sub PipeInsert()
Dim cell As Range
For Each cell In Selection
cell.Value = ReplaceTest(cell.Value, "([a-z])([A-Z])", "$1|$2")
Next
End Sub
Function ReplaceTest(str1, patrn, replStr)
Dim regEx
' Create regular expression.
Set regEx = New RegExp
regEx.Pattern = patrn
regEx.Global = True
' Make replacement.
ReplaceTest = regEx.Replace(str1, replStr)
End Function
答案 0 :(得分:4)
正则表达式替换很好:)
=regex("ThisIsAn ExampleString", "([a-z])([A-Z])", "$1|$2")
https://regex101.com/r/zF4mM5/1
我从this answer抓取=regex()
函数 - 之前从未使用Excel VBA ...
答案 1 :(得分:1)
您将使用所选语言的功能(在这种情况下为Excel VBA) - 我对此一无所知。我认为它具有使用正则表达式进行匹配和替换的能力......
如果它可以执行替换,你会想要这样的东西:
s/([a-z])([A-Z])/\1|\2/g
有一个快速的谷歌给我的印象VB宏有一个“RegExp”类可供他们 - 可以执行替换:
https://jsfiddle.net/sw5ohfqv/
Dim rgx As New Regex(pattern)
Dim result As String = rgx.Replace(input, replacement)
我的提案中 pattern
为([a-z])([A-Z])
; replacement
将是$1|$2
我这台机器上没有Excel,这纯粹是理论上的!
答案 2 :(得分:0)