GVKun编程网logo

Python正则表达式:单词集的替代(正则表达 python)

21

对于Python正则表达式:单词集的替代感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解正则表达python,并且为您提供关于c#–正则表达式:单个单词、python–正则表达式:匹配单词或

对于Python正则表达式:单词集的替代感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解正则表达 python,并且为您提供关于c# – 正则表达式:单个单词、python – 正则表达式:匹配单词或最大单词数、python正则表达式、Python正则表达式中的反斜杠转义序列和单词边界的宝贵知识。

本文目录一览:

Python正则表达式:单词集的替代(正则表达 python)

Python正则表达式:单词集的替代(正则表达 python)

我们知道\ba\b|\bthe\b会匹配单词“ a ”或“ the ”,
我想构建一个正则表达式来匹配像这样的模式

的/一个/一个原因/原因

这意味着我要匹配s包含3个单词的字符串:

  • 的第一个单词s应为“ a ”,“ the ”或“ one
  • 第二个单词应该是“ 原因 ”或“ 原因
  • 的第三个字s应为“ ”或“

正则表达式\ba\b|\bthe\b|\bone\b \breason\b|reasons\b \bfor\b|\bof\b无济于事。

我怎样才能做到这一点?顺便说一句,我使用python。谢谢。

答案1

小编典典

正则表达式模块的一个有趣功能是命名列表。有了它,您就不必|在非捕获组中包括多个由分隔的选项。您只需要在列表之前定义列表,并通过名称在模式中引用它即可。例:

import regexwords = [ [''a'', ''the'', ''one''], [''reason'', ''reasons''], [''for'', ''of''] ]pattern = r''\m \L<word1> \s+ \L<word2> \s+ \L<word3> \M''p = regex.compile(pattern, regex.X, word1=words[0], word2=words[1], word3=words[2])s = ''the reasons for''print(p.search(s))

即使此功能不是必需的,它也可以提高可读性。

如果您|在之前加入项目,则可以通过re模块实现类似的功能:

import rewords = [ [''a'', ''the'', ''one''], [''reason'', ''reasons''], [''for'', ''of''] ]words = [''|''.join(x) for x in words]pattern = r''\b ({}) \s+ ({}) \s+ ({}) \b''.format(*words)p = re.compile(pattern, re.X)

c# – 正则表达式:单个单词

c# – 正则表达式:单个单词

如果用户输入是单个单词,我想检查C#程序.我这个词只有字符A-Z和a-z.没有空格或其他字符.
我尝试[A-Za-z] *,但这不起作用.这个表达有什么问题?

Regex regex = new Regex("[A-Za-z]*");
if (!regex.IsMatch(userinput);)
{
  ...
}

你能推荐一个包含正则表达式的comprensiv列表的网站吗?!

解决方法

它可能有效,但你没有锚定正则表达式.您需要使用^和$将表达式分别锚定到字符串的开头和结尾:

Regex regex = new Regex("^[A-Za-z]+$");

我也改变了*因为*将匹配0次或更多次,而匹配1次或更多次.

python – 正则表达式:匹配单词或最大单词数

python – 正则表达式:匹配单词或最大单词数

我想找一个短语,跟随它后面的几个单词,但如果我找到另一个特定的短语,请提前停止.

例如,我想在“前往”之后匹配最多三个单词,但如果我遇到“试试”,则停止匹配过程.因此,例如“前往月神公园”将导致“月神公园”; “前往首都秘鲁”将导致“首都”和“月亮尝试一些芝士蛋糕”将导致“月亮”.

可以使用单个简单的正则表达式(最好是在Python中)吗?我已经尝试了所有我能想到的组合,但是失败了:).

解决方法

只要没有后续尝试((?!to try)),这个单词最多可匹配3个({1,3})单词:
import re
infile = open("input","r")
for line in infile:
    m = re.match("going to the ((?:\w+\s*(?!to try)){1,3})",line)
    if m:
        print m.group(1).rstrip()

产量

luna park
capital city of
moon

python正则表达式

python正则表达式

  • 正则表达式对象
  • 正则表达式修饰符
  • 正则表达式模式
  • re.match
  • re.search
  • 检索和替换
  • re.compile
  • findall
  • re.finditer
  • re.split

正则表达式对象

方法名称 作用
group 以str形式返回对象中match的元素
start 返回开始的位置
end 返回结束的位置
span 以tup形式返回范围

注意:这些方法不适用于findall,findall返回的是一个list

正则表达式修饰符

正则表达式可以包含一些可选标志修饰符来控制匹配的模式。

修饰符 描述
re.l 使匹配对大小写不敏感
re.L 做本地化识别(local-aware)匹配
re.M 多行匹配影响^和$
re.S 使.匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响\w,\W,\b,\B
re.X 该标志通过给予你更灵活的格式以便你将则正则表达式写的更易于理解

正则表达式模式

模式 描述
^ 匹配字符串的开头
$ 匹配字符串的末尾
. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
[…] 用来表示一组字符,单独列出:[amk]匹配’a’,“m”,或"k"
[^…] 不在[]中的字符:[^abc]匹配除了a,b,c之外的字符
re* 匹配0个或多个的表达式
re+ 匹配一个或多个的表达式
re? 匹配0个或一个由前面的正则表达式定义的片段,非贪婪模式
re{n} 精确匹配n个前面的表达式。
re{n,} 匹配n到m次由前面的正则表达式定义的片段,贪婪方式
(?#…) 注释
\w 匹配字母数字及下划线
\W 匹配非字母数字及下划线
\s 匹配任意空白字符
\S 匹配人资非空字符
\d 匹配任意数字
\D 匹配任意非数字
\A 匹配字符串开始
\Z 匹配字符串结束,结果是存在换行,只匹配到换行前的结束字符串。
\z 匹配字符串结束
\G 匹配最后匹配完成的位置
\b 匹配一个单词边界,也就是指单词和空格间的位置。
\B 匹配非单词边界。
\n,\t等 匹配一个换行符。匹配一个制表符

re.match

re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置的话,match()就返回None。

语法:

re.match(pattern, string, flags=0)

参数:

参数 描述
pattern 匹配的正则表达式
string 要匹配的字符串
flags 标志位,用于控制正则表达式的匹配方法

匹配成功re.match方法返回一个匹配的对象,否则返回None

re.search

re.search 扫描整个字符串并返回第一个成功的匹配

语法:

re.search(parttern, string, flags=0)

参数:

参数 描述
pattern 匹配的正则表达式
string 要匹配的字符串
flags 标志位,用于控制正则表达式的匹配方法

匹配成功re.search方法返回一个匹配的对象,否则返回None

例:

import re
#在起始位置匹配
print(re.search(''www'', ''www.baidu.com'').span())
#不在起始位置匹配
print(re.search(''com'', ''www.baidu.com'').span())

(0, 3)
(10, 13)

re.match与re.search的区别
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None,而re.search匹配整个字符串,直到找到一个匹配。

检索和替换

python的re模块提供了re.sub用于替换字符串中的匹配项

语法:

re.sub(pattern, repl, string, count=0, flags=0)

参数:

  • pattern : 正则中的模式字符串。
  • repl : 替换的字符串,也可为一个函数。
  • string : 要被查找替换的原始字符串。
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

例:

import re
phone = "2004-959-559 # 这是一个国外电话号码"

#删除字符串中的python注释
num = re.sub(r''#.*$'', "", phone)
print("电话号码是:", num)

#删除非数字(-)的字符串
num = re.sub(r''\D'', "", phone)
print("电话话是:", num)

电话号码是:2004-959-559
电话号码是:2004959559

re.compile

compile函数用于编译正则表达式,生成一个正则表达式(Pattern)对象,供match()和search()两个函数使用。
语法:

re.compile(pattern[, flags])

参数:

  • pattern : 一个字符串形式的正则表达式
  • flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
  • re.I忽略大小写
  • re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
  • re.M 多行模式
  • re.S即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
  • re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
  • re.X 为了增加可读性,忽略空格和 # 后面的注释

例:

import re
pattern = re.compile(r''\d+'') #匹配至少一个数字
#查找头部,没有匹配
m = pattern.match(''one12twothree34four'')
print(m)
结果:None
#从‘e’的位置开始匹配,没有匹配
m = pattern.match(''one12twothree34four'', 2, 10)
结果:None
#从‘1’的位置开始匹配,正好匹配
m = pattern.match(''one12twothree34four'', 3, 10)
print(m)
#返回一个Match对象
结果:<_sre.SRE_Match object at 0x10a42aac0>

findall

在字符串中找到正则表达式所匹配的所有子串,返回一个列表,如果没有找到匹配的,则返回空列表
注意:match和search是匹配一次findall匹配所有

语法:

findall(string, pos[, endpos])

参数:

  • string : 待匹配的字符串。
  • pos : 可选参数,指定字符串的起始位置,默认为 0。
  • endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。

例:

import re
pattern = re.compile(r''\d+'') #查找数字
result1 = pattern.findall(''runoob 123 google 453'')
result2 = pattern.findall(''run88oob123google456'', 0, 10)

print(result1)
print(result2)
结果:
[''123'', ''456'']
[''88'', ''12'']

re.finditer

和findall类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

re.finditer(pattern, string, flags=0)

参数:

参数 描述
pattern 匹配的正则表达式
string 要匹配的字符串
flags 标志位,用于控制正则表达式的匹配方式

例:

import re
it = re.finditer(r"\d+","12a32bc43jf3")
for match in it:
    print(match.group())
#结果:
12
32
43
3    

re.split

split方法按照能够匹配的子串将字符串分割后返回列表
语法:

re.split(pattern, string[, maxspilt=0, flags=0])

参数:

参数 描述
pattern 匹配的正则表达式
string 要匹配的字符串
maxspilt 分隔次数,maxspilt=1分隔一次,默认0
flags 标志位,用于控制正则表达式的匹配方式

例:

import re
re.split(''\W+'', ''runoob, runoob, runoob.'')
[''runoob'', ''runoob'', ''runoob'', '''']

人生漫漫其修远兮,网安无止境。
一同前行,加油!

Python正则表达式中的反斜杠转义序列和单词边界

Python正则表达式中的反斜杠转义序列和单词边界

目前正在使用 re.sub(re.escape("andrew)"),"SUB",stringVar)

预期行为:

stringVar = " andrew) "
re.sub(re.escape("andrew)"),stringVar) # Returns " SUB "

意外行为:

stringVar = "zzzandrew)zzz"
re.sub(re.escape("andrew)"),stringVar) # Returns "zzzSUBzzz"

因此,我尝试使用单词边界来修复“ zzzandrew)zzz”,但是我的修复破坏了我的基本情况。

stringVar = " andrew) "
re.sub(r'\b%s\b' % re.escape("andrew)"),stringVar) # Breaks and returns the original stringVar

来自:https :
//docs.python.org/2.0/ref/strings.html-

原始字符串,并对反斜杠转义序列使用不同的规则。那么,除了重新逃生我该怎么办?

我们今天的关于Python正则表达式:单词集的替代正则表达 python的分享就到这里,谢谢您的阅读,如果想了解更多关于c# – 正则表达式:单个单词、python – 正则表达式:匹配单词或最大单词数、python正则表达式、Python正则表达式中的反斜杠转义序列和单词边界的相关信息,可以在本站进行搜索。

本文标签: