2011-05-04 377 views
6

我需要替换字符串中的某个字节,但替换内容可能会有所不同。它可以是替换VBA中的变量字符串

XY - test 
XXxY-test 
XXyyXx-TEST 
yXyy  -Test 

以及几乎任何其他空白和上述情况的组合。

我需要替换“-test”部分,并单独保留“XXX”。所以,使用简单替换时

Replace("XXX -test", "- test", "") 

显然它不起作用。所以我需要一个更复杂的版本来处理这个任务。有什么我可以用,或者我必须自己写吗?

+1

正则表达式([见本](http://www.vbforums.com/showthread.php?t=480272))可能适合你。我不确定你的模式字符串是什么样的,但是有很多写这些的网站。 – jonsca 2011-05-04 13:02:44

回答

8

如果您需要比mj82方法提供的更多灵活性(例如,您可能不知道初始表达式的长度),则可以使用正则表达式。例如:

Regex.Replace("XXX -test", "\s*-\s*test", "", RegexOptions.IgnoreCase) 
+2

我想使用你的函数,并得到一个对象不存在的错误。当我为“正则表达式”添加手表时,它说该对象是空的。任何想法为什么发生这种情况?我需要加载一个库吗?我在Excel 2010中 – 2013-11-14 04:43:05

+0

您需要为您的引用添加“Microsoft VBScript Regular Expressions”(当前版本为5.5),然后使用“Dim Regex作为新的正则表达式”声明该变量。 – Toast 2016-08-02 21:14:28

1

如果XXX是第一个,你可以使用left(string; 3)函数tu cut 3(或者你需要的任何长度)字母,然后你不关心它后面是什么。

+0

好的,我忘了在问题中澄清。 XXX也是任何字符的变量(甚至可能包括“测试”等) – 2011-05-04 13:09:57

+0

如果您可以切到“ - ”符号(并且它不能在XXX表达式中),那么这可能有所帮助:Left(mystr,InStr(mystr, “ - ”) - 1),它会剪切所有字母,直到第一次出现“ - ”。否则 - Regex是最好的解决方案。 – mj82 2011-05-04 13:30:48

8

这是恭维eggyal的答案。这是一个VBA regexreplace函数,以便您可以使用他的答案。你会发现我说ignore_case作为灵活性的选择,让您的来电将是:

=RegexReplace(cell, "\s*-\s*test", "", TRUE) 

下面是函数,我希望你觉得它有用:

' ------------------------------------------------------------------- 
' Search and Replace using a regular expression 
' ------------------------------------------------------------------- 

Function RegexReplace(ByVal text As String, _ 
         ByVal replace_what As String, _ 
         ByVal replace_with As String, _ 
         Optional ByVal ignore_case As Boolean = False) As String 

Dim RE As Object 
Set RE = CreateObject("vbscript.regexp") 

RE.ignorecase = ignore_case 
RE.pattern = replace_what 
RE.Global = True 
RegexReplace = RE.Replace(text, replace_with) 

End Function