首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python问题

Python问题
EN

Stack Overflow用户
提问于 2013-05-20 17:05:53
回答 2查看 893关注 0票数 0

我在将RegEx表达式转换为python时遇到了问题。我知道'(\\d+)'是单个整数的表达式,但我不知道如何得到一个2-9的整数。

RegEx表达式如下:

代码语言:javascript
运行
复制
[2-9][p-z][a-h][2-9][a-z]*[p-z][2-9][p-z][2-9][p-z]

这是我当前的表达式,但它会产生许多假阳性,因为它不够具体:

re1='(\\d+)' # Integer Number 1 re2='([a-z])' # Any Single Word Character (Not Whitespace) 1 re3='([a-z])' # Any Single Word Character (Not Whitespace) 2 re4='(\\d+)' # Integer Number 2 re5='((?:[a-z][a-z]+))' # Word 1 re6='(\\d+)' # Integer Number 3 re7='([a-z])' # Any Single Word Character (Not Whitespace) 3 re8='(.)' # Any Single Character 1 re9='([a-z])' # Any Single Word Character (Not Whitespace) 4

代码语言:javascript
运行
复制
            ## Regex search for passcodes ## Thanks to Pierluigi Failla
            rg = re.compile(re1+re2+re3+re4+re5+re6+re7+re8+re9,re.IGNORECASE|re.DOTALL)
            m = rg.search(txt)
            if m:
                int1=m.group(1)
                w1=m.group(2)
                w2=m.group(3)
                int2=m.group(4)
                word1=m.group(5)
                int3=m.group(6)
                w3=m.group(7)
                c1=m.group(8)
                w4=m.group(9)
                txt2='"'+int1+w1+w2+int2+word1+int3+w3+c1+w4+'"'
                return [txt2]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-20 18:11:01

根据我在你的问题中看到的,我提出了这个代码:

代码语言:javascript
运行
复制
import re

pat = ('([2-9])'        # Integer Number 1
       '([p-z])'        # Any Single Word Character (Not Whitespace) 1
       '([a-h])'        # Any Single Word Character (Not Whitespace) 2
       '([2-9])'        # Integer Number 2
       '([a-z]*[p-z]+)' # Word 1
       '([2-9])'        # Integer Number 3
       '([p-z])'        # Any Single Word Character (Not Whitespace) 3
       '(.)'            # Any Single Character 1
       '([p-z])'        # Any Single Word Character (Not Whitespace) 4
       )
rg = re.compile(pat)

txt = 'jiji4pa6fmlgkfmoaz8p#q,,,,,,,,,,'
m = rg.search(txt)
if m:
    text2 = "%s%s%s%s%s%s%s%s%s" % m.groups()
    print text2

# prints 4pa6fmlgkfmoaz8p#q

编辑

代码语言:javascript
运行
复制
text2 = ''.join(m.groups())  # is better
票数 1
EN

Stack Overflow用户

发布于 2013-05-20 17:17:13

您应该能够在Python中使用范围2-9,如:re1 = re.compile(r'[2-9]')。然后,我的控制台中的一个测试显示,re1.match('7')以您想要的方式返回MatchObject,而re1.match('0')返回的是None,也是您想要的。

您还似乎在re2中使用了range [a-z],您说希望在其他字符范围中使用[p-z] --类似的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16654573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档