gpt4 book ai didi

用于替换部分字符串(包括单引号 ('))的正则表达式

转载 作者:行者123 更新时间:2023-12-02 23:26:50 26 4
gpt4 key购买 nike

我正在尝试替换撇号之间的文本部分,不是全部,只是一部分。例如,我需要将仅在引号之间的文本内的字符/* 和 */替换为空文本,但不在引号之外。

我输入的文字,例如:

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 IfEnd Sub

显然,这会将引号之间的所有文本替换为空字符串。

如何解决这个问题?

最佳答案

此表达式可能会帮助您替换那些不需要的 /*:

[A-Z]\s\/\*\s[A-Z]

我们可以简单地将其包装在捕获组 () 中,类似于:

([A-Z])\s(\/\*)\s([A-Z])

然后,我们可以将其替换为 $1 $3 并忽略第二个不需要的捕获组:

enter image description here

This tool帮助您根据需要修改/更改/编辑您的表达式。

正则表达式描述图

这个link帮助您可视化您的表情:

enter image description here

编辑

如果这些捕获组中可能有更多模式,您可以简单地使用 |such as 添加它们。 :

([A-Z])\s(\/\*|\*\/)(\s[A-Z]|\x27)

您可能还想使用 \x27 而不是 ',以便您的代码变得易于阅读。

enter image description here

JavaScript 演示

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);

性能测试

此代码段返回 100 万次 for 循环的运行时间。

const repeat = 1000000;
const start = Date.now();

for (var i = repeat; i >= 0; i--) {
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`;

var match = str.replace(regex, subst);
}

const end = Date.now() - start;
console.log("YAAAY! \"" + match + "\" is a match 💚💚💚 ");
console.log(end / 1000 + " is the runtime of " + repeat + " times benchmark test. 😳 ");

关于用于替换部分字符串(包括单引号 ('))的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56091671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com