我正在尝试替换撇号之间的文本的一部分,而不是全部,只是一部分。 例如,我需要将仅在引号之间的文本内的字符/ *和* /替换为空文本,而不是在它们之外。
我的输入文字,例如:
A = 'THIS IS AN ALPHABETIC /* CONSTANT' || WS_CON1 /* */ || 'TEST STRING */';
预期输出:
A = 'THIS IS AN ALPHABETIC CONSTANT' || WS_CON1 /* */ || 'TEST STRING ';
我提取了引号中的文本,但是我不知道如何用空文本替换/ *和* /。
Sub ReplaceWithRegex() Dim strPattern As String Dim strReplace As String Dim regEx As Variant Dim strtxt As String Set regEx = CreateObject("vbscript.regexp") strtxt = "A = 'THIS IS AN ALPHABETIC /* CONSTANT' || WS_CON1 /* */ || ' TEST STRING */';" strPattern = "\'([^\']*)\'" strReplace = "" With regEx .Global = True .MultiLine = True .IgnoreCase = False .Pattern = strPattern End With If regEx.Test(strtxt) Then Debug.Print regEx.Replace(strtxt, strReplace) Else MsgBox ("Not matched") End If End Sub
显然,这会将引号之间的所有文本替换为空字符串。
我该如何解决这个问题?
答案 0 :(得分:5)
此表达式可以帮助您替换不需要的b'
:
capitals.getOrElse("test","N/A")
您可以使用捕获组/*
来简单地包装它的相关部分,类似于:
[A-Z]\s\/\*\s[A-Z]
然后,您可以将其替换为()
并忽略第二个不需要的组:
This tool可帮助您根据需要修改/更改/编辑表达式。
此link可帮助您形象化表情:
如果这些捕获组中可能有更多模式,则可以简单地使用 | ,such as添加它们:
([A-Z])\s(\/\*)\s([A-Z])
您可能还想使用$1 $3
而不是([A-Z])\s(\/\*|\*\/)(\s[A-Z]|\x27)
,以便使您的代码易于阅读。
\x27
此代码段返回一百万次'
循环的运行时间。
const regex = /([A-Z])\s(\/\*|\*\/)(\s[A-Z]|\x27)/gm;
const str = `A = 'THIS IS AN ALPHABETIC /* CONSTANT\' || WS_CON1 /* */ || \'TEST STRING */';`;
const subst = `$1$3`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
答案 1 :(得分:4)
这是使用正则表达式的另一种VBA方法。
Option Explicit
'Set Reference to Microsoft VBScript Regular Expressions 5.5
Function reReplaceComment(S As String) As String
Dim RE As RegExp
Dim I As Long, J As Long
Set RE = New RegExp
With RE
.Global = True
.Pattern = "('[^']*?)(?:(?:/\*)|(?:\*/))([^']*?')"
reReplaceComment = .Replace(S, "$1$2")
End With
End Function
('[^']*?)(?:(?:/\*)|(?:\*/))([^']*?')
('[^']*?)
(?:(?:/\*)|(?:\*/))
([^']*?')
$ 1 $ 2
$1
$2
由RegexBuddy创建