如何定义具有多个 OR 运算符的正则表达式,其中每个术语都包含空格前缀和后缀?

2023-12-28

我正在准备数据提取任务。我需要删除一组术语;每个源记录字符串中可以没有、部分或全部出现。有超过 100,000 条目标记录。我想避免执行单个术语匹配/替换操作,因为(a)要删除的术语列表可能会增长,并且(b)一次执行一个术语的当前匹配/替换操作的时间是不可接受的。

我的问题:如何修改正则表达式以包含 OR 分隔列表中的每个术语?

正则表达式

' and | and or | a o | company | co | c o | dba | d b a '

期望的行为

将每个找到的术语(包括前缀和后缀空格)替换为单个空格。

实际行为

找到的每个“偶数”(与“奇数”相反)术语都被替换为单个空格(包括前缀和后缀空格)。

EXAMPLE

源字符串

'   MASHABLE LTD DBA THE INFORMATION EXPERTS and and or a o company co c o dba d b a COPYRIGHT  '

结果字符串(所需行为)

'   MASHABLE LTD THE INFORMATION EXPERTS COPYRIGHT  '

结果字符串(实际行为)

'   MASHABLE LTD THE INFORMATION EXPERTS and or company c o d b a COPYRIGHT  '

环境

SQL Server 2005

用户定义函数 regexReplace 依赖于 VBScript.RegExp (代码在帖子末尾提供)

CODE

set nocount on

declare @source [varchar](800)
declare @regexp [varchar](400)
declare @replace [char](1)
declare @globalReplace [bit]
declare @ignoreCase [bit]
declare @result [varchar](800)

set @globalReplace = 1
set @ignoreCase = 1

SET @source = '   MASHABLE LTD DBA THE INFORMATION EXPERTS and and or a o company co c o dba d b a COPYRIGHT  '
set @regexp = ' and | and or | a o | company | co | c o | dba | d b a '
set @replace = ' '

select @result = master.dbo.regexReplace(@source,@regexp,@replace,@globalReplace,@ignoreCase)

print @result

...产生结果:

   MASHABLE LTD THE INFORMATION EXPERTS and or company c o d b a COPYRIGHT  

* dbo.regex替换用户定义的函数定义 *

CREATE FUNCTION [dbo].[regexReplace]
    (
    @source varchar(5000),
    @regexp varchar(1000),
    @replace varchar(1000),
    @globalReplace bit = 0,
    @ignoreCase bit = 0
    )
    RETURNS varchar(1000) AS
        BEGIN
            DECLARE @hr integer
            DECLARE @objRegExp integer
            DECLARE @result varchar(5000)

            EXECUTE @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
            IF @hr <> 0 
                BEGIN
                    EXEC @hr = sp_OADestroy @objRegExp
                    RETURN NULL
                END
            EXECUTE @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
            IF @hr <> 0 
                BEGIN
                    EXEC @hr = sp_OADestroy @objRegExp
                    RETURN NULL
                END
            EXECUTE @hr = sp_OASetProperty @objRegExp, 'Global', @globalReplace
            IF @hr <> 0 
                BEGIN
                    EXEC @hr = sp_OADestroy @objRegExp
                    RETURN NULL
                END
            EXECUTE @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase
            IF @hr <> 0 
                BEGIN
                    EXEC @hr = sp_OADestroy @objRegExp
                    RETURN NULL
                END

            EXECUTE @hr = sp_OAMethod @objRegExp, 'Replace', @result OUTPUT, @source, @replace
            IF @hr <> 0 
                BEGIN
                    EXEC @hr = sp_OADestroy @objRegExp
                    RETURN NULL
                END

            EXECUTE @hr = sp_OADestroy @objRegExp
                IF @hr <> 0 
                    BEGIN
                        RETURN NULL
                    END

            RETURN @result
        END

尝试这个:

(?: (?:and or|and|a o|company|co|c o|dba|d b a))+(?!\S)/i

就像@mathematical.coffee一样,我首先分解出前导空格并用前瞻替换尾随空格——在本例中,negative前瞻一个非空白特点。这样,即使标记是字符串中的最后一个并且后面没有空格,它也会起作用。但最重要的变化是尽可能一次替换两个或更多匹配项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何定义具有多个 OR 运算符的正则表达式,其中每个术语都包含空格前缀和后缀? 的相关文章

  • 对于简单查询,SNIReadSync 的执行时间为 120-500 毫秒。我要寻找什么?

    我正在对 SQL Server 2005 执行一个简单的查询 protected static void InitConnection IDbCommand cmd cmd CommandText set transaction isola
  • Python 正则表达式从文本中提取域

    我有以下正则表达式 r a zA Z0 9 a zA Z0 9 61 a zA Z0 9 a zA Z 2 6 当我将其应用于文本字符串时 比方说 这是 www website1 com 这是 website2 com 我得到 www we
  • 正则表达式删除某些字符周围不需要的空格

    我正在尝试从 JavaScript 文件中删除一些不需要的空格 并在将文件发送到客户端之前使用 C 和 Regex 组合文件 我有一个JavascriptHandler处理 js 文件 效果很好 这是我用来 打包 JavaScript 的函
  • 正则表达式:如何表达没有下划线的 \w

    有没有简洁的表达方式 w but without 即 w 中包含的所有字符 除了 我问这个是因为我正在寻找最简洁的方式来表达域名验证 域名可以包含小写和大写字母 数字 句号和破折号 但不能包含下划线 w 包括以上所有内容 加上下划线 那么
  • 正则表达式贪婪匹配未按预期工作

    我有一个非常基本的正则表达式 我只是不明白为什么它不起作用 所以问题分为两部分 为什么我当前的版本不起作用以及正确的表达方式是什么 规则非常简单 必须至少包含 3 个字符 如果 字符是第一个字符 则必须至少包含 4 个字符 因此 以下情况应
  • 字边界正则表达式问题

    我在使用单词边界时遇到问题 b在我的正则表达式中 我正在使用 R 但当我尝试时问题也存在http regexr com http regexr com 我使用的模式是 bs l b 虽然我预计下面的第 1 行和第 3 行能够匹配此模式 但只
  • 仅匹配空格或字符串开头/结尾之间的整数的正则表达式

    我目前正在使用该模式 b d b 用这些条目测试它 numb3r 2 3454 3 214 test 我只希望它捕获 2 和 3454 它非常适合捕获数字单词 除了边界标志 b 包括 作为一个单独的词考虑 我尝试排除句点 但在编写模式时遇到
  • 如何在Python中的正则表达式中匹配字符串列表中的任何字符串?

    假设我有一个字符串列表 string lst fun dum sun gum 我想创建一个正则表达式 在其中的某个点 我可以匹配该列表中的任何字符串 在一个组内 如下所示 import re template re compile r el
  • 使用 .htaccess 重定向到动态相对路径?

    是否可以使 htaccess 理解 动态相对路径并正确重定向到它们 我的设置如下 http domain com htroot aaa xyz http domain com htroot bbb xyz http domain com h
  • 将字符串分解为标记,保持引用的子字符串完整

    我不知道我在哪里看到它 但是谁能告诉我如何使用 php 和 regex 来完成这个任务 this is a string that has quoted text inside 我希望能够像这样爆炸它 0 this 1 is 2 a 3 s
  • Angular 2:使用正则表达式进行数字验证

    我正在尝试验证 IE 11 中的数字字段
  • Java:正则表达式 - 如何获取第一个引用文本

    作为初学者regex我相信我要问的事情太简单了 但无论如何我都会问 希望它不会打扰你帮助我 可以说我有这样的文字 你好 cool1 这个词 cool2 我想获取第一个引用的文本 即 cool1 不带 我的模式应该是什么 当使用匹配器时 我如
  • 在 OSX 和 GNU 中使用“find”删除带有数字的文件名

    我正在尝试搜索一个文件并删除名称中包含数字的类似文件 我的文件 txt from myfile 00 04 version txt myfile 00 txt find E iregex myfile 0 9 1 txt 删除 myfile
  • 多行 C# 正则表达式在空行后匹配

    我正在寻找一个多行正则表达式 它将匹配空行后出现的情况 例如 给定下面的示例电子邮件 我想匹配 发件人 Alex From s 可以匹配任何 From 行 但我希望它仅限于正文中的行 第一个空白行之后的任何行 Received from a
  • Golang 正则表达式命名组和子匹配

    我正在尝试匹配正则表达式并获取匹配的捕获组名称 当正则表达式仅与字符串匹配一次时 这是有效的 但如果它与字符串匹配多次 SubexpNames不返回重复的名称 这是一个例子 package main import fmt regexp fu
  • 需要 RegEx 返回第一段或前 n 个单词

    我正在寻找一个正则表达式来返回段落中的前 n 个单词 或者如果该段落包含少于 n 个单词 则返回完整的段落 例如 假设我最多需要前 7 个单词 p one two p
  • 如何从 pandas 数据框中的列中删除字符串值

    我正在尝试编写一些代码 以逗号分隔数据帧列中的字符串 因此它成为一个列表 并从该列表中删除某个字符串 如果存在 删除不需要的字符串后 我想再次以逗号加入列表元素 我的数据框如下所示 df Column1 Column2 0 a a b c
  • 由于重复捕获组而不是捕获重复组,正则表达式不匹配

    我有以下正则表达式 A G A G 具有以下表达式 A BsCb 我期望 3 个匹配结果 A Bs Cb 但测试在https regex101 com https regex101 com 只给我最后一场比赛Cb 并告诉我重复捕获组只会捕获
  • 如何在正则表达式中输入“:”(“冒号”)?

    冒号 在正则表达式中具有特殊含义 但我需要按原样使用它 例如 A Za z0 9 我试图逃避它 但这不起作用 A Za z0 9 在大多数正则表达式实现 包括 Java 的 中 无论在字符类内部还是外部 都没有特殊含义 您的问题很可能是由于
  • PHP URL 验证

    我知道有无数的线程问这个问题 但我一直无法找到一个可以帮助我解决这个问题的线程 我基本上试图解析大约 10 000 000 个 URL 的列表 确保它们根据以下标准有效 然后获取根域 URL 此列表包含您能想象到的几乎所有内容 包括类似的内

随机推荐

  • 如何在 ASP.net IIS 7.5 中利用浏览器缓存

    以下可缓存资源的新鲜生命周期较短 指定以下资源至少在未来一周内到期 http pagespeed googlelabs com http pagespeed googlelabs com建议我将此作为我的网站的高度优先事项 我正在使用 Wi
  • 用于 GUI 的 Java 2D 场景图形库

    我正在寻找用于构建 GUI 应用程序的 2D 场景图形库 它应该很快 使用 Java2D 并与 Swing 兼容 可嵌入 Swing 应用程序并显示 Swing 组件 对动画的支持是一个优点 您有使用某些图书馆的经验吗 有没有我错过的图书馆
  • Numpy 图像数组:如何有效地从 RGB 切换到 Hex

    我一直在使用嵌套 for 循环将 RGB 图像转换为十六进制值的图像数组 但对于大图像来说太慢了 有谁知道可以帮助我从 RGB 切换回 HEX 的快速方法和 或库 编辑 ragingSloth 这是我想出的 但对于我的需要来说太慢了 def
  • 如何在 Travis CI 上安装某些东西而不超时?

    我正在尝试测试 travis ci org 上构建的包 但 pip install scipy 遇到超时 Installing collected packages scipy Running setup py install for sc
  • 如何从 Excel 单元格获取完整值,而不是显示的(四舍五入)值?

    我在从工作表的单元格检索确切值时遇到问题 如果我打开文件 单元格有一个十进制数 仅显示 4 位小数 但如果我单击特定单元格 则该值会不同 有 6 位小数 我知道这是应用于单元格的设置 以便仅显示 4 位小数 现在我尝试使用 ClosedXM
  • WPF中如何移动焦点?

    我想知道是否有办法将焦点从当前控件移至 WPF 中 TabIndex 分配的控件上的其他控件 例子 我有 TabIndex 1 到 5 的控件 有没有办法将焦点从 1 跳转到 5
  • 从 C# 类设置 Gridview“标题”的样式

    我正在尝试在 C 文件中设置 ASP Net GridView 标题的样式 这是我返回样式化 GridView 的方法 private GridView setupGridView string caption var gview new
  • 检查context.Request.Body的条件是azure api管理策略中的JArray或JObject

    我正在使用 Azure API 管理策略表达式将供应商值发送到每个帖子 对后端 API 的放置和删除请求 我编写了一个代码 当请求类型为 JObject 时 该代码工作正常 但我有一些请求可以是 JArray 类型的情况 在这种情况下它会抛
  • 如何在IIS7中禁用应用程序池空闲超时?

    如果我将空闲超时设置为0 它会被禁用吗 是的 将空闲超时值设置为零将禁用空闲超时 奇怪的是 这没有记录在 MS 文档中 但我的证据来自 IIS 设置架构 如果您查看了 IIS 设置架构 C Windows System32 inetsrv
  • 如何安装:OpenSSL + WAMP

    这里有人有关于如何在我的本地开发计算机上获取 SSL 的清晰详细的步骤吗 我已在 c wamp 上安装了最新版本的 WAMP 2 2c 我在网上找到的说明在大多数情况下似乎已经过时 并且缺乏正确完成工作所需的详细信息 指南 WampServ
  • wl-pprint-extras 中的可选空格和多个替代项

    是否有一种好的 可接受的方法来获得两种以上的替代布局 特别是支持可选空间的方式 特别是 我可能想通过以下三种方式之一打印列表 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 按照该优先顺序 您可以先尝试一种替代方案 然后再尝试另
  • 从 FireWire 获取视频流

    我正在尝试通过 FireWire 将摄像机 Sony HVR Z1E 中的视频流式传输到我的计算机 传入的图片 流应由一些期望 CVMat 格式 来自 openCV 的函数进一步处理 好吧 我现在的问题是我不知道如何获取流 好吧 openC
  • Istio 分布式跟踪与 Jaeger 不起作用

    我正在尝试设置本地 k8s 集群minikube已安装istio我在使用 Jaeger 启用分布式跟踪时遇到问题 我有3个微服务A gt B gt C 我正在传播所需的所有标头 x request id x b3 traceid x b3
  • escapeshellarg 和 escapeshellcmd 有什么区别?

    PHP 有 2 个密切相关的函数 escapeshellarg http php net escapeshellarg and escapeshellcmd http php net escapeshellcmd 它们似乎都做类似的事情 即
  • super() 并更改协作方法的签名

    在多重继承设置中 例如所列出的 我该如何使用super 并处理层次结构中的类之间函数签名发生变化的情况 即我可以重写这个例子 在 python3 中 来使用super 例子取自文章super 被视为有害文章 https fuhm net s
  • 为什么在这个 Perl 示例中,defineed sdf 返回 true?

    我在 Perl 中尝试了这个例子 有人可以解释为什么这是真的吗 if defined sdf print true 它打印true sdf 可以是任何名称 另外 如果定义了 sdf 函数并且返回 0 则不会打印任何内容 print sdf
  • C++ 中的赋值运算符返回右值还是左值?

    C 中的赋值运算符返回右值还是左值 如果它是左值 那么两个参数中的哪一个将在这里递增 a b 它返回一个lvalue 根据第 5 17 条 赋值运算符 和复合赋值运算符 从右到左分组 全部都需要一个可修改的左值作为他们的左边 操作数并返回引
  • SQLServer连接预登录

    在 SQL Server 2000 中使用 Hibernate 时出现以下错误 Dec 12 2015 12 54 20 AM com microsoft sqlserver jdbc SQLServerConnection Prelogi
  • sys.dm_exec_sql_text 如何工作?

    你能解释一下原因吗 select from sys dm exec sql text sql handle 抛出错误 无效的列名 sql handle 但是 select from sys sysprocesses cross apply
  • 如何定义具有多个 OR 运算符的正则表达式,其中每个术语都包含空格前缀和后缀?

    我正在准备数据提取任务 我需要删除一组术语 每个源记录字符串中可以没有 部分或全部出现 有超过 100 000 条目标记录 我想避免执行单个术语匹配 替换操作 因为 a 要删除的术语列表可能会增长 并且 b 一次执行一个术语的当前匹配 替换