python,用正则表达式匹配特定汉字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python,用正则表达式匹配特定汉字相关的知识,希望对你有一定的参考价值。

待测试字符串有:
“5元起,每小时1元”
“10起每小时5元”
“价格200起每分钟加5”,等等
其中起步价格式为:一个数字+(元)+起,即可能有“元”也可能没有“元”
需要把起步价全部筛出来。
谁知道正则怎么写?帮我改一下下面的代码吧,本人新手,谢谢谢谢!!
import re
#describtion="5元起,每小时1元"
#describtion="10起每小时5元"
describtion="价格200起每分钟加5"
pattern1 = re.compile(r'[0-9][0-9]0,10[元]?起')
match=pattern1.findall(describtion)

期望得到:
“5元起”
“10起”
“200起”

在Python的string前面加上‘r’, 是为了告诉编译器这个string是个raw string,不要转意backslash '\' 。 例如,\n 在raw string中,是两个字符,\和n, 而不会转意为换行符。由于正则表达式和 \ 会有冲突,因此,当一个字符串使用了正则表达式后,最好在前面加上'r'。
在[]中
-长用来指定一个字符集,在这个字符集中的一个可以拿来匹配:[abc] [a-z]
-元字符在在字符集中不起作用
-在[]内用^表示补集,用来匹配不在区间范围内的字符
s=r'aba' 匹配abc
s=r't[io]p' 匹配tip或者top
s=r't[a-z0-9A-Z]'匹配t+0-9或者a-z或者A-Z
[abc]表示“a”或“b”或“c”
[0-9]表示0~9中任意一个数字,等价于[0123456789]
[\u4e00-\u9fa5]表示任意一个汉字
[^a1<]表示除“a”、“1”、“<”外的其它任意一个字符
[^a-z]表示除小写字母外的任意一个字符
参考技术A import re
str=re.findall("\d.?起",description)

这样应该就可以了吧,没试过中文的

Python正则表达式匹配特定单词

【中文标题】Python正则表达式匹配特定单词【英文标题】:Python regex to match a specific word 【发布时间】:2013-06-10 00:29:02 【问题描述】:

我想匹配测试报告中包含“Not Ok”字样的所有行。 文本示例:

'Test result 1: Not Ok -31.08'

我试过了:

filter1 = re.compile("Not Ok")
for line in myfile:                                     
    if filter1.match(line): 
       print line

这应该根据http://rubular.com/ 工作,但我在输出中一无所获。任何想法,可能有什么问题?测试了各种其他参数,例如“。”和 "^Test" ,它们工作得很好。

【问题讨论】:

如果它是一个特定的字符串,为什么要使用正则表达式?为什么不if "Not Ok" in line: 顺便说一句,re.match() 只匹配字符串的开头。 我确信 match 不仅可以做字符串的开头.. $ 不应该匹配行尾吗? 也许我不清楚:re.match("a")re.search("^a") 相同。 re.match("Not Ok") 将为"Not Ok Joe!" 返回True,为"It's Not Ok!" 返回False 啊,我明白了。从 Python 文档中不是很清楚。每天学习新东西! 【参考方案1】:

在这种情况下绝对不需要使用 RegEx!只需使用:

s = 'Test result 1: Not Ok -31.08'
if s.find('Not Ok') > 0 : 
    print("Found!")

或如前所述:

if 'Not Ok' in s:
    print("Found!")

【讨论】:

【参考方案2】:

你可以简单地使用,

if <keyword> in str:
    print('Found keyword')

例子:

if 'Not Ok' in input_string:
    print('Found string')

【讨论】:

【参考方案3】:

您应该在这里使用re.search 而不是re.match

来自docsre.match

如果您想在字符串中的任何位置找到匹配项,请改用 search()。

如果您要查找确切的单词 'Not Ok',则使用 \b 单词边界,否则 如果您只是在寻找子字符串 'Not Ok',请使用简单的:if 'Not Ok' in string

>>> strs = 'Test result 1: Not Ok -31.08'
>>> re.search(r'\bNot Ok\b',strs).group(0)
'Not Ok'
>>> match = re.search(r'\bNot Ok\b',strs)
>>> if match:
...     print "Found"
... else:
...     print "Not Found"
...     
Found

【讨论】:

确实,即使没有所有额外的 \b 东西,这也有效。谢谢!我还发现 re.findall 在这种情况下有效。 @casper 没有\b 它也会返回True 类似的东西:'KNot Oke're.findall 返回所有非重叠匹配的列表,用于检查目的 re.search 是最佳选择。

以上是关于python,用正则表达式匹配特定汉字的主要内容,如果未能解决你的问题,请参考以下文章

如何用正则表达式判断文本中包含有汉字

python 模块-re

正则表达式如何在几个汉字词组之间选择

C#正则表达式如何提取一段字符串中汉字后的数字

正则表达式如何匹配汉字?

正则表达式匹配文件名