当前所在位置: 首页 > 网站购买

swift中,正则表达式没有办法给分组捕获命名吗?中文域名的验证正则表达式

2021-10-11 本站作者 【 字体:

/^[A-Za-z0-9_\u4E00-\u9FA5]{1,20}([\.\-][A-Za-z0-9_\u4E00-\u9FA5]{1,20})*$/
试试这样吧,你用的php程序哟?自己写几个超出的和符合的验证一下就知道了。+表示“1个或者多个”,改成{1,20}就可以了

补充:=============================================
你的意思是有
www.我是中文域名123im.com这种混合形式而如果其中不出现中文的那段就可以超过20的么?那可以改一改:
/^(?:[\w_]+|[A-Za-z0-9_\u4E00-\u9FA5]{1,20})([\.\-][A-Za-z0-9_\u4E00-\u9FA5]{1,20}|[\w_]+)*$/
没试过,你可以用你那边样本域名测试下看

  全力以赴地进入数据集是从事数据科学工作的任何人的使命之一。通常,这意味着要进行数字运算,但是当我们的数据集主要基于文本时,我们该怎么办?我们可以使用正则表达式。在本教程中,我们将仔细研究如何在Python中使用正则表达式(regex)。

  正则表达式(regex)本质上是文本模式,可用于自动搜索和替换文本字符串中的元素。这可以使清理和使用基于文本的数据集变得更加容易,从而省去了手动搜索大量文本的麻烦。

  正则表达式可以在多种编程语言中使用,并且已经存在很长时间了!

  不过,在本教程中,我们将学习Python中的正则表达式,因此需要基本熟悉关键的Python概念,例如if-else语句,while和for循环等。在本教程结束时,您将熟悉Python regex的工作原理,并能够使用Python regex模块中的基本模式和功能re来分析文本字符串。您还将获得有关正则表达式如何与熊猫配合使用以处理大型文本语料库的介绍。

swift中,正则表达式没有办法给分组捕获命名吗?中文域名的验证正则表达式(图1)



  让我们深入研究有关每个人最不喜欢的电子邮件类型的一些数据:垃圾邮件和欺诈。

  我们的任务:分析垃圾邮件

  在本教程中,我们将使用Kaggle的欺诈电子邮件语料库。它包含1998年至2007年之间发送的数千种网络钓鱼电子邮件。它们非常有趣,易于阅读。

  您可以在这里找到完整的语料库。但是,我们将从使用一些电子邮件学习基本的正则表达式命令开始。如果需要,您也可以使用我们的测试文件,也可以在完整的语料库中尝试使用。

  介绍Python的Regex模块

swift中,正则表达式没有办法给分组捕获命名吗?中文域名的验证正则表达式(图2)



  首先,我们将通过打开测试文件,将其设置为只读并读取来准备数据集。我们还将其分配给变量fh(用于“文件句柄”)。

  请注意,我们在目录路径之前加r。此技术将字符串转换为原始字符串,这有助于避免某些机器读取字符的方式引起的冲突,例如Windows上目录路径中的反斜杠。

  现在,假设我们要找出电子邮件的来源。我们可以自己尝试使用原始Python:

swift中,正则表达式没有办法给分组捕获命名吗?中文域名的验证正则表达式(图3)



  但这并没有给我们确切的需求。如果您看一下我们的测试文件,我们可以找出原因并修复它,但是,让我们使用Python的re模块并使用正则表达式来做吧!

  我们将从导入Python的re模块开始。然后,我们将使用一个名为的函数re.findall(),该函数返回在正在查看的字符串中定义的模式的所有实例的列表。

  外观如下:

swift中,正则表达式没有办法给分组捕获命名吗?中文域名的验证正则表达式(图4)



  这与原始Python的长度基本相同,但这是因为这是一个非常简单的示例。您尝试做的越多,Python正则表达式就可以为您节省更多的精力。

  在继续之前,让我们仔细看看re.findall()。此函数采用形式为的两个参数re.findall(pattern, string)。在这里,pattern代表我们要查找的子字符串,并string代表我们要在其中查找的主字符串。主字符串可以包含多行。在这种情况下,我们让它fh使用选定的电子邮件来搜索所有文件。

  该.*是一个字符串模式的简写。正则表达式通过使用这些速记模式来查找文本中的特定模式而起作用,因此让我们看一下其他一些常见示例:

  常见的Python正则表达式模式

  我们re.findall()上面使用的模式包含一个完整拼写的字符串"From:"。当我们确切地知道我们要查找的内容(精确到实际字母以及它们是否为大写或小写)时,这很有用。如果我们不知道我们想要的字符串的确切格式,我们将会迷路。幸运的是,正则表达式具有解决此情况的基本模式。让我们看看在本教程中使用的那些:

  1)w匹配字母数字字符,表示az,AZ和0-9。它还与下划线_和破折号-相匹配。

  2)d 匹配数字,表示0-9。

  3)s 匹配空白字符,包括制表符,换行符,回车符和空格字符。

  4)S 匹配非空格字符。

  5).匹配除换行符外的任何字符n。

  掌握了这些正则表达式模式后,您将在继续进行解释的同时快速理解上面的代码。

使用正则表达式模式

  现在,我们可以.*在re.findall("From:.*", text)上面的行中解释的用法。让我们.先来看:

swift中,正则表达式没有办法给分组捕获命名吗?中文域名的验证正则表达式(图5)



  通过在.旁边添加一个From:,我们可以在其旁边查找另一个字符。因为.查找除以外的任何字符n,所以它捕获了我们看不到的空格字符。我们可以尝试更多的点来验证这一点。

swift中,正则表达式没有办法给分组捕获命名吗?中文域名的验证正则表达式(图6)



  看起来加点确实为我们获得了线的其余部分。但是,这很繁琐,而且我们不知道要添加多少点。这是星号符号*出现的位置。

  *匹配模式左侧的零个或多个实例。这意味着它将寻找重复模式。当我们寻找重复的模式时,我们说搜索是“贪婪的”。如果我们不寻找重复的模式,则可以将搜索称为“非贪婪”或“懒惰”。

  让我们构建一个贪婪的搜索.用*。

swift中,正则表达式没有办法给分组捕获命名吗?中文域名的验证正则表达式(图7)



  因为*匹配在其左侧指示的模式的零个或多个实例,并且.位于此处的左侧,所以我们能够获取From:字段中的所有字符,直到行尾。这将用精美简洁的代码打印出整行。

  我们甚至可以更进一步,仅隔离名称。让我们使用它re.findall()来返回包含模式的行列表,"From:.*"就像之前一样。match为了整洁,我们将其分配给变量。接下来,我们将遍历列表。在每个循环中,我们将re.findall再次执行,匹配第一个引号以仅选择名称:

swift中,正则表达式没有办法给分组捕获命名吗?中文域名的验证正则表达式(图8)



  注意,我们在第一个引号旁边使用了反斜杠。反斜杠是一个特殊字符,用于转义其他特殊字符。例如,当我们想将引号用作字符串文字而不是特殊字符时,可以使用反斜杠将其转义,例如:"。如果我们不使用反斜杠转义上面的模式,它将变为"".*"",Python解释器将其读取为两个空字符串之间的句点和星号。它将产生错误并破坏脚本。因此,至关重要的是我们在这里用反斜杠将引号引起来。

  匹配第一个引号后,.*获取行中的所有字符,直到下一个引号也被转义为模式。这使我们得到的名称只是带引号的名称。该名称也打印在方括号中,因为re.findall返回的匹配项在列表中。

  如果我们想要电子邮件地址怎么办?

swift中,正则表达式没有办法给分组捕获命名吗?中文域名的验证正则表达式(图9)



  看起来很简单,不是吗?仅模式不同。让我们来看一看。

  这是我们仅匹配电子邮件地址的前部分的方式:

swift中,正则表达式没有办法给分组捕获命名吗?中文域名的验证正则表达式(图10)



  电子邮件总是包含一个@符号,因此我们从它开始。电子邮件中@符号前的部分可能包含字母数字字符,这w是必需的。但是,由于某些电子邮件包含句点或破折号,所以这还不够。我们添加S以查找非空白字符。但是,w\S只会得到两个字符。添加*以查找重复。因此,模式的前部如下所示:\w\S*@。

  现在查看@符号后面的模式:

swift中,正则表达式没有办法给分组捕获命名吗?中文域名的验证正则表达式(图11)



  域名通常包含字母数字字符,句点和短划线,因此a .可以。为了使它更贪婪,我们使用扩展了搜索范围*。这使我们可以匹配任何字符,直到行尾。

  如果我们仔细观察这条线,会发现每封电子邮件都封装在尖括号<和>中。我们的模式.*包括右括号>。让我们对其进行补救:

swift中,正则表达式没有办法给分组捕获命名吗?中文域名的验证正则表达式(图12)



  电子邮件地址以字母数字字符结尾,因此我们将模式设置为w。因此,在@符号后面有.*\w,这表示我们想要的模式是一组以字母数字字符结尾的任何类型的字符。不包括>。

  因此,我们的完整电子邮件地址格式如下所示:\w\S*@.*\w。

  !这需要花费很多时间。接下来,我们将介绍一些通用re功能,这些功能在开始重新组织语料库时将非常有用。

  常用的Python正则表达式函数

  re.findall()无疑是有用的,但它不是我们可以使用的唯一内置函数re:

  1)re.search()

  2)re.split()

  3)re.sub()

  在使用它们为我们的数据集添加一些顺序之前,让我们一一看一下。

  研究()

  While re.findall()匹配字符串中某个模式的所有实例并在列表中返回它们,re.search()匹配字符串中一个模式的第一个实例,并将其作为re匹配对象返回。

swift中,正则表达式没有办法给分组捕获命名吗?中文域名的验证正则表达式(图13)



  像一样re.findall(),re.search()也有两个参数。第一个是要匹配的模式,第二个是要在其中找到模式的字符串。在这里,我们将结果分配给match变量以保持整洁。

  由于re.search()返回re匹配对象,因此无法通过直接打印来显示名称和电子邮件地址。相反,我们必须首先对该group()函数应用该函数。我们已经在上面的代码中打印了这两种类型。如我们所见,group()将match对象转换为字符串。

  我们还可以看到,打印match显示的属性超出字符串本身,而打印match.group()仅显示字符串。

  re.split()

  假设我们需要一种快速的方法来获取电子邮件地址的域名。我们可以通过三个正则表达式操作来做到这一点,如下所示:

swift中,正则表达式没有办法给分组捕获命名吗?中文域名的验证正则表达式(图14)



  第一行很熟悉。我们返回一个字符串列表,每个字符串包含From:字段的内容,并将其分配给变量。接下来,我们遍历列表以查找电子邮件地址。同时,我们循环访问电子邮件地址,并使用该re模块的split()功能将每个地址切成两半,用@符号作为分隔符。最后,我们打印它。

  re.sub()

  另一个方便的re功能是re.sub()。就像函数名称所暗示的那样,它替换字符串的一部分。一个例子:

swift中,正则表达式没有办法给分组捕获命名吗?中文域名的验证正则表达式(图15)



  我们之前已经在第一行和第二行看到了任务。在第三行,我们re.sub()在上应用address,这是From:电子邮件标题中的完整字段。

  re.sub()需要三个参数。第一个是要替换的子字符串,第二个是我们要替换的字符串,第三个是主字符串本身。

  正则表达式与pandas

  现在,我们掌握了Python正则表达式的基础知识。但是通常对于数据任务,我们实际上并没有使用原始的Python,而是使用了pandas库。现在,将我们的正则表达式技能带入熊猫工作流程,将其提升到一个新的水平。

  如果您以前从未使用过熊猫,请不要担心。我们将逐步遍历代码,以免您迷路。但是,如果您想更详细地了解熊猫,请查看我们的熊猫教程或我们提供的有关numpy和熊猫的完全交互式课程。

  使用Python Regex和Pandas对电子邮件进行排序

  我们的语料库是一个包含数千封电子邮件的单个文本文件(不过,同样,在本教程中,我们使用的是一个只有两个电子邮件的较小文件,因为在整个语料库上打印正则表达式工作的结果会使这篇文章过长)。

  我们将使用正则表达式和熊猫将每封电子邮件的各个部分分类为适当的类别,以便可以更轻松地阅读或分析语料库。

  我们将每封电子邮件分为以下类别:

  1)sender_name

  2)sender_address

  3)recipient_address

  4)recipient_name

  5)date_sent

  6)subject

  7)email_body

  这些类别中的每一个都将成为我们的熊猫数据框(即我们的表格)中的一列。这将使我们更轻松地分别处理和分析每个列。

  我们将继续处理我们的小样本,但是值得重申的是,正则表达式使我们可以编写更简洁的代码。简洁的代码减少了我们的机器必须执行的操作数量,从而加快了我们的分析过程。使用我们的两封电子邮件的小文件,并没有太大的区别,但是,如果您尝试使用和不使用正则表达式来处理整个语料库,您将开始看到其优势!

  准备脚本

  首先,让我们导入所需的库,然后再次打开文件。

  除了re和之外pandas,我们email还将导入Python的软件包,这将有助于电子邮件的正文。仅使用正则表达式时,电子邮件的主体相当复杂。它甚至可能需要足够的清理才能保证有自己的教程。因此,我们将使用完善的email软件包来节省一些时间,让我们专注于学习正则表达式。

swift中,正则表达式没有办法给分组捕获命名吗?中文域名的验证正则表达式(图16)



  我们还创建了一个空列表emails,用于存储字典。每本词典将包含每封电子邮件的详细信息。

  现在,让我们开始应用正则表达式!

swift中,正则表达式没有办法给分组捕获命名吗?中文域名的验证正则表达式(图17)



  注意:为简洁起见,我们剪裁了上面的打印输出。如果您在自己的机器上打印此文件,它将显示其中包含的所有内容,contents而不是...像上面那样结束。

  我们使用re模块的split函数将整个文本块分割fh为单独的电子邮件列表,然后将其分配给变量contents。这很重要,因为我们希望通过使用for循环遍历列表来逐一处理电子邮件。但是,我们如何知道按字符串分割"From r"?

  我们之所以知道这一点,是因为在编写脚本之前我们已经查看了文件。我们不必细读其中的数千封电子邮件。只是前几个,看看数据的结构是什么样子。只要有可能,最好在开始使用代码之前先关注实际数据,因为您经常会发现诸如此类的有用功能。

  我们已经截取了原始文本文件的屏幕截图:

阅读全文
id_1广告位-300*300
相关推荐

注册一个域名的流程是什么?网站域名注册的流程是什么?

注册一个域名的流程是什么?网站域名注册的流程是什么?
总共有三个步骤(本站所有的域名注册步骤是一样的,这里以英文域名为例)。 一...

哈尔滨1地升级为高风险地区、5地升级为中风险地区五一从重庆去广州回来需要隔离吗?

哈尔滨1地升级为高风险地区、5地升级为中风险地区五一从重庆去广州回来需要隔离吗?
关于将利民开发区裕田街道等地区风险等级调整为中高风险地区的通告根据国务院联防联控...

绥芬河、满洲里、哈尔滨全为低风险区,明起全国已无中风险区域疫情当前我的担当是什么?

绥芬河、满洲里、哈尔滨全为低风险区,明起全国已无中风险区域疫情当前我的担当是什么?
不畏关山千里路,冰心一片付征鞍。据央视***客户端,黑龙江省应对新型冠状病毒感染...

黑龙江哈尔滨8地区升为中风险广东到呼伦贝尔用隔离吗?

黑龙江哈尔滨8地区升为中风险广东到呼伦贝尔用隔离吗?
内蒙古自治区新冠肺炎疫情防控指挥部关于进一步加强管控严防新冠肺炎疫情输入传播扩散...

什么是网关、DNS、子网掩码、MAC地址DNS服务器:小黑屋中的“翻译官”大神

什么是网关、DNS、子网掩码、MAC地址DNS服务器:小黑屋中的“翻译官”大神
什么是网关 DNS服务器是一个外行听起来比较专业的词汇,大部分只是听说过DNS,...

中英域名后面的英文分别代表什么意思?如何把域名翻译为IP地址?

中英域名后面的英文分别代表什么意思?如何把域名翻译为IP地址?
在DOS窗口中 PING 名以一个常见的域名为例说明,baidu网址是由...

上海现在属于什么风险地区?本土确诊+16,哈尔滨两地升中风险

上海现在属于什么风险地区?本土确诊+16,哈尔滨两地升中风险
9月21日0时至24时,31个省(自治区、直辖市)和新疆生产建设兵团报告新增确诊...

风险等级几级才算是重大危险源本土确诊+3!哈尔滨公告:非必要不离哈,两地调整为中风险,国家卫健委派工作组赴哈丨一财早知道

风险等级几级才算是重大危险源本土确诊+3!哈尔滨公告:非必要不离哈,两地调整为中风险,国家卫健委派工作组赴哈丨一财早知道
上班路上10分钟,时事财富样样通【隔夜关注】据哈尔滨市政府***办召开的疫情防控...

中国疫情重灾区是哪里?昨日本土新增28例,哈尔滨多地调为中风险

中国疫情重灾区是哪里?昨日本土新增28例,哈尔滨多地调为中风险
没有重灾区了。9月22日0—24时,31个省(自治区、直辖市)和新疆生产建设兵团...

阿里云买可以一个域名,我做解析,需要什么设备?域名出售平台哪家好?

阿里云买可以一个域名,我做解析,需要什么设备?域名出售平台哪家好?
前提:网站做好想上线,需要域名和空间(服务器)备案通过。解析:一般只需要拿到服务...