首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Rego:给定regex列表和字符串列表,创建与任何regex都不匹配的所有字符串的集合

基础概念

正则表达式(Regex):是一种用于匹配字符串中字符组合的模式。它使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。

集合(Set):在数学和计算机科学中,集合是指明确的、互不相同的对象的汇总。

相关优势

  1. 高效匹配:正则表达式能够快速地匹配或排除大量字符串。
  2. 灵活性:可以创建复杂的模式来匹配各种字符串。
  3. 简洁性:相比其他字符串处理方法,正则表达式通常更简洁。

类型与应用场景

类型

  • 基本正则表达式:提供基础的匹配功能。
  • 扩展正则表达式:增加了更多的功能和符号。

应用场景

  • 文本搜索与替换:在文档中查找特定模式并替换。
  • 数据验证:检查输入是否符合特定格式(如邮箱地址)。
  • 日志分析:从日志文件中提取有用信息。

遇到的问题及解决方法

问题:如何创建一个与任何给定正则表达式都不匹配的所有字符串的集合?

解决方法

  1. 理解问题:首先,需要明确目标是找出那些不匹配任何给定正则表达式的字符串。
  2. 构建正则表达式集合:将所有给定的正则表达式组合成一个大的正则表达式,表示所有可能的匹配模式。
  3. 使用否定预查:在正则表达式中使用否定预查((?!...))来排除所有匹配的模式。
  4. 生成测试字符串:创建一系列测试字符串,并使用上述正则表达式进行匹配测试。
  5. 收集结果:收集所有未匹配的字符串,形成最终的集合。

示例代码(Python)

代码语言:txt
复制
import re

# 给定的正则表达式列表
regex_list = [r'\d+', r'\w+@\w+\.\w+', r'\b[A-Z]+\b']

# 组合成一个大的正则表达式,表示所有可能的匹配模式
combined_regex = '|'.join(regex_list)

# 使用否定预查来排除所有匹配的模式
negative_regex = f'(?!{combined_regex})'

# 字符串列表
string_list = ['123', 'abc@example.com', 'HelloWorld', 'world!', '456def']

# 创建一个空集合来存储不匹配的字符串
non_matching_strings = set()

# 遍历字符串列表,检查每个字符串是否匹配
for s in string_list:
    if not re.search(negative_regex, s):
        non_matching_strings.add(s)

print(non_matching_strings)

解释

  • combined_regex:将所有正则表达式通过 |(或)连接起来,形成一个大的正则表达式。
  • negative_regex:使用否定预查 (?!...) 来排除所有由 combined_regex 匹配的模式。
  • non_matching_strings:存储所有未匹配的字符串。

通过这种方法,可以有效地创建一个与任何给定正则表达式都不匹配的所有字符串的集合。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python 正则表达式(RegEx)指南

*Spain$", txt)RegEx 函数re 模块提供了一组函数,允许我们在字符串中搜索匹配项:函数 描述findall 返回包含所有匹配项的列表search 如果字符串中的任何位置存在匹配项..._ 字符) "\w" \W 返回字符串不包含任何单词字符的匹配项 "\W" \Z 如果指定的字符位于字符串的末尾,则返回一个匹配项 "Spain\Z" 集合集合是一个放在一对方括号 [...] 中的一组字符,具有特殊含义:集合 描述[arn] 返回一个匹配项,其中存在指定的字符(a、r 或 n)[a-n] 返回任何小写字符的匹配项,字母顺序在 a 和 n 之间[^arn] 返回除...a、r 和 n 之外的任何字符的匹配项[0123] 返回字符串中存在任何指定的数字(0、1、2 或 3)的匹配项[0-9] 返回字符串中存在任何数字(0 到 9)的匹配项[0-5][0-9] 返回字符串中存在任何两位数的匹配项...:返回字符串中的任何 + 字符的匹配项findall() 函数findall() 函数返回一个包含所有匹配项的列表。

25100
  • Js中RegExp对象

    ,如果使用g标志,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组,如果未使用g标志,则仅返回第一个完整匹配及其相关的捕获组Array。...,替换所有符合正则模式的匹配项,并返回替换后的新字符串结果,用来替换的参数可以是一个字符串或是一个针对每次匹配的回调函数,这个方法基本可以和String.prototype.replace()一样使用,...[@@search]() regexp[Symbol.search](str) [@@search]()方法执行了一个在给定字符串中的一个搜索以取得匹配正则模式的项,这个方法的使用方式和String.prototype.search...将匹配单个o,而o+将匹配所有o。 .: 匹配除换行符(\n、\r)之外的任何单个字符,要匹配包括\n在内的任何字符,请使用像(.|\n)的模式。...如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。

    10.6K20

    SQL Server 2005 正则表达式使模式匹配和数据提取变得更容易

    尝试使用内置的字符串函数执行任何复杂的文本分析会导致难于调试和维护的庞大的函数和存储过程。有更好的办法吗? 实际上,正则表达式提供了更高效且更佳的解决方案。...通过定义的选项和提供的模式创建 Regex 实例,然后 IsMatch 方法将被用于确定指定的输入是否与模式匹配。...匹配 并非确定字符串是否与模式匹配,它有时需要提取每个匹配项。以前,这类提取需要游标循环访问字符串的各部分。该过程不仅速度慢,而且代码也难于理解和维护。正则表达式是执行此操作的更好方法。...[Text] 此模式与任何不包含逗号的字符组匹配。如果给定一个名为 Data 的表和一个名为 ID 的整数列,此查询将返回列表中标识的每个记录。...此函数还可用于未以逗号分隔的列表。也可处理以空格、分号、制表符、回车或任何其他可识别字符分隔的列表。 ? 在匹配项中进行数据提取 类似于返回匹配项,我们还可以从每个匹配项中提取数据。

    6.4K60

    正则表达式介绍

    可以创建的最简单的正则表达式只由常规字符组成。如果你想在文本中找到所有出现的单词 "Virgilio" ,你可以编写正则表达式Virgilio。在这个正则表达式中,没有角色做任何特殊或不同的事情。...关键是你找到了一个匹配,你将字符串分解为before匹配部分和after匹配部分,然后将这两个与Virgilio粘合在一起。 请注意,字符串替换可能会更快更容易,但这会破坏本练习的目的。...输入 re.sub(regex,rep,string) 将在给定的字符串上使用给定的正则表达式,并且无论何时匹配,它都会删除匹配并将 rep 放在那里。...匹配计数 现在我想要你定义 count_matches 函数,它接受一个正则表达式和一个字符串,并返回给定字符串中存在的非重叠匹配的数量。...如果您按照该链接,您将找到一段采用正则表达式的代码,然后打印给定正则表达式匹配的所有字符串。 我将给你几个关于它是如何工作的例子: import sys sys.path.append(".

    4.9K00

    CC++可以用正则表达式吗?

    匹配(Match) 字符串处理常用的一个操作是匹配,即字符串和规则恰好对应,而用于匹配的函数为std::regex_match(),它是个函数模板 bool regex_match(string s,regex...std::regex_search,也是个函数模板,用法和regex_match一样,不同之处在于搜索只要字符串中有目标出现就会返回,而非完全匹配。...搜索给定字符串中是否存在与模式匹配的子串,如果存在则返回true。 同样可以用smatch result记录结果,但不同的是result[0]记录的是整个字符串中从左往右第一个匹配模式的子串。...删除了没必要的点,是不是贼方便... 对字符串data中与模式匹配的所有子串进行相应的字符串替换,替换字符串引用匹配子串中的内容,引用方法如下 匹配第n 个捕捉组的字符串。...答案毋庸置疑,有的,在Linux操作系统中正则表达式常用来查找文本里面指定的内容,如果阅读量可观,后期还会发布Linxu下字符串匹配查找grep的详细使用和实战 正则表达式更为详细的讲解在下面两篇推送中

    1.2K30

    C#中的正则匹配和文本处理

    正则表达式本身就是一个定义了用于其他字符串搜索模式的字符串. 通常情况下, 正则表达式中的字符与其自身匹配, 比如正则表达式"the"可以与字符串中任意位置找到的同样字符序列相匹配。...把正则表达式传递给dir(目录文件显示)命令, 然后在文件系统中任何与"myfile.exe"相匹配的文件都会显示在屏幕上。 许多用户还会在正则表达式中用到元字符....程序做的第一件事就是创建一个新的Regex 对象并且把要匹配的正则表达式传递给构造函数. str1字符串初始化之后, 程序声明了一个Match 对象matchSet....在下面这段程序中, 正则表达式只与第一个字符为字母"h"的字符串相匹配, 而忽略掉字符串中其他位置上的"h"....例如, 给定了生日和年龄的字符串, 而用户只想确定日期的话. 通过把日期分组到一起,就可以确定它们作为一组, 而不再需要单独进行匹配了. 6、匿名组 这里可能用到几个不同的分组构造.

    2.6K41

    .NET正则表达式

    验证文本以确保它匹配预定义模式(如电子邮件地址)。 提取、编辑、替换或删除文本子字符串。 将提取的字符串添加到集合中,以便生成报告。...通过调用 Regex.Match 或 Regex.Matches 方法检索匹配正则表达式模式的一个或所有文本匹配项。...\1 与等于名为 \1 的组的子字符串匹配。 \b 与字边界匹配。 通过将正则表达式选项设置为 Regex.Matches,调用 RegexOptions.IgnoreCase 方法。...(集合中的第一个元素表示整个匹配。) [0-9]{0,3} 查找十进制数字 0 到 9 的零到三个匹配项。 (,[0-9]{3})* 查找后跟三个十进制数字的组分隔符的零个或多个匹配项。 ....如果在输入字符串中找到所有这些子模式,则匹配成功,并将包含有关匹配的信息的 Match 对象添加到 MatchCollection 对象。

    2.1K20

    Java中使用正则表达式

    前言 正则在线测试工具 https://c.runoob.com/front-end/854/ Java语言中的正则表达式匹配功能主要是通过java.util.regex.Matcher类和以下这些方法实现的...find():在一个字符串里寻找一个给定模式的匹配。 lookingAt(): 用一个给定的模式去尝试匹配一个字符串的开头。 matches():用一个给定的模式去尝试匹配一个完整的字符串。...非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的”贪心的”模式匹配搜索到的、尽可能长的字符串。例如,在字符串”oooo”中,”o+?”只匹配单个”o”,而”o+”匹配所有”o”。...将X看做是一个整体 多用途元字符 *:只有当它出现在一个字符集合里(被放在[和]之间)并紧跟在左方括号[的后面时,它才能发挥“求非”作用。...如果是在一个字符集合的外面并位于一个模式的开头,^将匹配字符串的开头。 例如: [^abc]: 表示不是a,b,c中的任意一个; ^\s*:匹配一个<?

    89710

    python模块之re(正则表达式)

    maxsplit如果不为0,最多拆分maxsplit次,string参数的余下部分将作为列表的最后一个元素返回。如果在pattern中使用了分组(...),返回列表中还会包含所有匹配的分组本身。...,那么返回列表第一个元素是空字符串;同样地,如果pattern在字符串末尾匹配,返回列表的最后一个元素是空字符串: >>> re.split(r'(\W+)', '...words, words...'...', ''] re.findall(pattern, string, flags=0) 返回一个列表,按顺序排列所有成功的分组匹配。...如果pattern参数中只有一个分组,列表元素为所有成功的分组匹配;如果存在超过一个以上的分组,列表元素为元组形式的各个分组匹配。..., flags=0) 查找所有匹配成功的字符串, 返回一个迭代器,元素为SRE_Match对象。

    1.1K61

    两天研习Python基础(九) 文本处理

    仅移除首/尾连续的字符 默认空格会被除去 如果指定了多个字符,它会被视为集合,并使用其中所有的组合 >>> greeting = ' Have a nice day :) ' >>>...匹配除换行符\n之外的字符 | 或操作符,用于匹配多个模式 () 用于模式分组和提取 [] 字符类 - 匹配多个字符中的一个 \^ 使用\ 匹配元字符 量词 描述 * 匹配之前的字符0或多次 + 匹配之前的字符...匹配之前的字符0或1次 {n} 匹配n次 {n,} 匹配至少n次 {n,m} 匹配至少n次,至多m次 字符类 描述 [aeiou] 匹配任何元音 [^aeiou] ^ 倒置选择,所以这会匹配任何的辅音...详情和标记长名 变量 描述 \1, \2, \3 等等 引用匹配的模式 \g, \g, \g etc 引用匹配的模式,用于区分数字和引用 模式匹配和提取 匹配/提取字符序列 使用re.search...()查看是否一个字符串包含某个模式 使用re.findall()获得一个匹配模式列表 使用re.split()获得一个基于模式分割字符串的列表 它们的语法如下 re.search(pattern, string

    1K10

    四、正则表达式re模块 常用的匹配规则:Python 的 re 模块也可以直接用re.match(),re.search(),re.findall(),re.finditer(),re.sub()

    给定一个正则表达式和另一个字符串,我们可以达到如下的目的: 给定的字符串是否符合正则表达式的过滤逻辑(“匹配”); 通过正则表达式,从文本字符串中获取我们想要的特定部分(“过滤”)。...Pattern 对象的一些常用方法主要有: match 方法:从起始位置开始查找,一次匹配 search 方法:从任何位置开始查找,一次匹配 findall 方法:全部匹配,返回列表 finditer...2.2、search 方法     search 方法用于查找字符串的任何位置,它也是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果,它的一般使用形式如下:     search(string...然而,在大多数时候,我们需要搜索整个字符串,获得所有匹配的结果。     ...') 32 33 # 将正则匹配对象应用到html源码字符串里,返回这个页面里的所有文章的列表 34 content_list = pattern.findall

    3.2K41

    Laravel Validation 表单验证(二、验证表单请求)

    字符串,数值,数组,文件大小的计算方式都与 [size]规则一致. not_in:foo,bar,… 验证字段不能包含在给定的值的列表中。...验证字段必须与给定的正则表达式不匹配。...这在验证基本数据类型时特别有用,例如可以包含空值的字符串和整数。 numeric 验证字段必须为数值。 password 验证中的字段必须与经过身份验证的用户的密码匹配。...regex:pattern 验证字段必须与给定的正则表达式匹配。 验证时,这个规则使用 PHP 的 preg_match 函数。...size:value 验证字段必须与给定值的大小一致。对于字符串,value 对应字符数。对于数字,value 对应给定的整数值。对于数组,size 对应数组的 count 值。

    29.3K10

    正则表达式及string相关内容

    非贪心的"模式匹配搜索到的、尽可能短的字符串,而默认的"贪心的"模式匹配搜索到的、尽可能长的字符串。例如,在字符串"oooo"中,"o+?"只匹配单个"o",而"o+"匹配所有"o"。 ....匹配不在指定的范围内的任何字符。例如,"[^a-z]"匹配任何不在"a"到"z"范围内的任何字符。 \b 匹配一个字边界,即字与空格间的位置。...与 \x09 和 \cI 等效。 \v 垂直制表符匹配。与 \x0b 和 \cK 等效。 \w 匹配任何字类字符,包括下划线。与"[A-Za-z0-9_]"等效。 \W 与任何非单词字符匹配。...如果两种前面的情况都不存在,则 \nm 匹配八进制值 nm,其中 n 和 m 是八进制数字 (0-7)。...[a-zA-Z]+)+ * * boolean matches(String regex) * 匹配当前字符串是否符合给定的正则表达式的格式要求 */ String mail

    1K00

    Python 自动化指南(繁琐工作自动化)第二版:七、使用正则表达式的模式匹配

    任何其他字符串都不会匹配\d\d\d-\d\d\d-\d\d\d\d正则表达式。 但是正则表达式可以复杂得多。例如,在一个模式后的大括号({3})中添加一个3就像说“匹配这个模式三次”。...findall()方法在一个列表中返回正则表达式模式的所有匹配字符串。 创建自己的字符类 有时候,您想要匹配一组字符,但是速记字符类(\d、\w、\s等)太宽泛。您可以使用方括号定义自己的字符类。...例如,假设您想要匹配字符串'First Name:',后跟任意和所有文本,再跟'Last Name:',然后再跟任何内容。...要以一种非贪婪的方式匹配任何和所有文本,使用点、星和问号(.*?)。和大括号一样,问号告诉 Python 以非贪婪的方式进行匹配。...正则表达式字符串中的注释规则与常规 Python 代码相同:忽略符号#和其后到行尾的所有内容。此外,正则表达式的多行字符串中的多余空格不被视为要匹配的文本模式的一部分。

    6.6K40

    正则表达式必知必会 - 匹配一组字符

    [ 和 ] 不匹配任何字符,它们只负责定义一个字符集合。接下来,正则表达式里的普通字符 a 匹配字符 a ,. 匹配一个任意字符,\\. 匹配 . 字符本身,普通字符 xls 匹配字符串 xls。...这个模式可以匹配 RegEx 和 regex,但不匹配 REGEX。如果打算进行一次不需要区分字母大小写的匹配,不使用这个技巧也能达到目的。...比如下面这个模式可以匹配任何一个字母(无论大小写)或数字,但除此以外的其他字符都不匹配: [A-Za-z0-9]         下面的例子要查找的是 RGB 值(用一个十六进制数字给出的红、绿、蓝三基色的组合值...这将匹配一个由字符 # 开头,然后是 6 个数字或字母 A 到 F (大小写均可)的字符串。 三、排除         字符集合通常用来指定一组必须匹配其中之一的字符。...注意 ^ 的效果将作用于给定字符集合里的所有字符或字符区间,而不是仅限于紧跟在 ^ 字符后面的那一个字符或字符区间。

    25420

    正则表达式及string相关内容

    非贪心的"模式匹配搜索到的、尽可能短的字符串,而默认的"贪心的"模式匹配搜索到的、尽可能长的字符串。例如,在字符串"oooo"中,"o+?"只匹配单个"o",而"o+"匹配所有"o"。 ....匹配不在指定的范围内的任何字符。例如,"[^a-z]"匹配任何不在"a"到"z"范围内的任何字符。 \b 匹配一个字边界,即字与空格间的位置。...与 \x09 和 \cI 等效。 \v 垂直制表符匹配。与 \x0b 和 \cK 等效。 \w 匹配任何字类字符,包括下划线。与"[A-Za-z0-9_]"等效。 \W 与任何非单词字符匹配。...如果两种前面的情况都不存在,则 \nm 匹配八进制值 nm,其中 n 和 m 是八进制数字 (0-7)。...[a-zA-Z]+)+ * * boolean matches(String regex) * 匹配当前字符串是否符合给定的正则表达式的格式要求 */ String mail

    57820

    网络爬虫 | 正则表达式

    正则表达式中匹配与查找 正则表达式,简称为regex,是文本模式的描述方法。...regex对象的search()方法查找传入的字符串,寻找该正则表达式的所有匹配。 如果字符串中没有找到该正则表达式模式,search()方法将返回None。...groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。 利用括号分组,如将区号从电话号码中分离,添加括号将在正则表达式中创建"分组"。...例如,正则表达式(Ha){3,5}将匹配'HaHaHa'、'HaHaHaHa'和'HaHaHaHaHa'。 贪婪与非贪婪 如果需要匹配一段包含各种不同类型数据的字符串,传统方法需要挨个去匹配,而使用....方法按照能够匹配的子串将字符串分割后返回列表。

    1.2K30

    #抬抬小手学Python#内置模块之 re 库,一文搞定正则表达式初阶用法

    re.I,re.IGNORECASE:忽略正则表达式的大小写; re.M,re.MULTILINE:正则表达式中的 \^ 操作符能够将给定字符串的每行当做匹配的开始; re.S,re.DOTALL:正则表达式中的...操作符能够匹配所有字符。 最后将匹配到的字符串进行输出,使用下述代码即可实现。...函数原型如下: re.split(pattern, string, maxsplit=0, flags=0) re.split 函数进行分割的时候,如果正则表达式匹配到的字符恰好在字符串开头或者结尾,返回分割后的字符串列表首尾都多了空格...("nice", my_str) print(ret) 上述代码将正则表达式编译为一个正则对象,后面在 regex.sub 函数中就不需要在写正则表达式了,使用时,只需要将编译好的 regex 对象替换所有的...re 库的 match 对象 ------------------- 使用 re 库匹配字符串之后,会返回 match 对象,该对象具备以下属性和方法。

    50640
    领券