当前位置: 首页 > 知识库问答 >
问题:

用于替换包含单引号(')的部分字符串的RegEx

班经亘
2023-03-14

我试图替换一篇文章中撇号之间的一部分,而不是全部,只是一部分。例如,我需要将字符/*和*/替换为空文本,它们只在引号之间的文本中,而不在引号之外。

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

我如何解决这个问题?

共有1个答案

庄经国
2023-03-14

下面是另一个使用正则表达式的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
('[^']*?)(?:(?:/\*)|(?:\*/))([^']*?')
  • 匹配下面的regex并将其匹配捕获到backreference编号1('[^']*?)
    • 与字符“‘”字面匹配'
    • 匹配任何不是“‘”的字符[^']*?
      • 在零和无限次之间,尽可能少的次数,根据需要展开(懒惰)*?
      • 匹配此选项(仅当此选项失败时才尝试下一个选项)(?:/\*)
        • 匹配下面的正则表达式(?:/\*)
          • 与字符“/”字面匹配/
          • 与字符“*”字面匹配\*
            null
            null
          • 通过捕获组号1$1
          • 插入上次匹配的文本
          • 通过捕获组号2$2
          • 插入上次匹配的文本

          用RegexBuddy创建

          https://imgs.xnip.cn/cj/n/11/73aa5a95-9bf1-48e1-b8bc-3e427fac4a94.png" width="100%" height="100%" />

 类似资料:
  • 我可以将替换为其他一些字符序列(例如)来执行字符串替换,但是如果我可以用正则表达式来替换,这将更加清楚。

  • 两行的一个例子是:([a,b,c],d)和([d,e],a)我想把这些行转换成([a,b,c],[d,e])和([d,e],[a,b,c]) dataframe的列名是“src”和“dst”。 我如何处理这个问题?

  • 问题内容: 这让我发疯了,所以请您帮忙… 我有一个Java字符串,我想用单引号替换所有反斜杠双引号序列,即使我逃避了我认为必要的替换命令,该命令也不会对字符串产生任何影响。 感谢任何建议。 谢谢。 问题答案: 在Java中,字符串是不可变的。您对字符串执行的任何操作都会产生新的对象。操作后,您需要重新分配值。以下内容可能会对您有所帮助。

  • 所以我想替换一个文本文件的一部分,只知道它看起来是这样的: 名称将从终端输入,方括号内将有数百行的值以及其他方括号。而且单词Part前面会有一个制表符,在第一个之后会有一个新的行{在最后一个之前也会有一个新的行和一个制表符。我该如何用另一个字符串替换括号内的部分,甚至全部。

  • 本文向大家介绍替换php字符串中的单引号为双引号的方法,包括了替换php字符串中的单引号为双引号的方法的使用技巧和注意事项,需要的朋友参考一下 实例如下: 以上这篇替换php字符串中的单引号为双引号的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 我使用的是Sublime Text 3,我有一个CSV文件,其中包含单引号: 输入: 使用正则表达式,我想“中和”但不删除不合适的单引号(例如,)和撇号(例如)。 “中和”的具体意思是将放在每个单引号/撇号前面,因此输出为: 输出: 到目前为止的进展:我想我有2件需要解决的难题。 首先,我可以使用正则表达式自己查找并替换每个字段的引号示例: 输入:查找:

  • 问题内容: 我正在从数据库中检索数据,其中该字段包含带有HTML数据的字符串。我想替换所有的双引号,使得它可以被用于的 jQuery的 。 使用Java,我正在尝试使用替换引号。 结果字符串未显示所需的更改。O’Reilly的一篇文章规定了使用Apache字符串工具。还有其他办法吗? 是否有正则表达式或我可以使用的东西? 问题答案: 这是如何做 请注意,字符串是不可变的,因此仅仅做是不够的。您必须