正则表达式问题

sweetswing 2020-12-15 10:40:42


正则表达式的题目

请教,答案是多少?

为什么是这个答案?
...全文
159 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sweetswing 2020-12-16
  • 打赏
  • 举报
回复
完美的解答,非常满意
sweetswing 2020-12-15
  • 打赏
  • 举报
回复
我心中的答案是com

可惜选择项里没有啊
crifan 2020-12-15
  • 打赏
  • 举报
回复
笔误,上面后续优化代码中,应该写成 反斜杠 加 点:\.

    multiDomainP = "(?P<wholeDomain>(?P<subDomain>\w+)\.(?P<hostOrg>(?P<host>\w+)\.(?P<org>\w+)))"

crifan 2020-12-15
  • 打赏
  • 举报
回复
简答:选 A = ifcode.com

详解:


((www).((ifcode).(com)))
|__________ 0 _________| 0 默认是匹配整个的,完整的,所有的 字符串
从左向右数是第几个左括号:
|__________ 1 _________| 第一个括号 就是 group(1)
|_2_| |______ 3 _____| 第2个括号 和 第3个 括号的范围,分别如左边所示
|___4__| |_5_| 第4个括号 和 第5个 括号的范围,分别如左边所示

-> 所以此处的 group(3) 对应着:
((ifcode).(com))
的部分,即:
ifcode.com


另外也可借助工具看的更清楚:

RegExr: Learn, Build, & Test RegEx



点评:
出题者这么出,是想考你:
(1)是否知道 默认的 group(0),始终表示是 全部匹配的结果,或者说 是否知道 group(0) 的存在
(2)考察你 group的计算规则,其实就是 从左向右右数,最低是1,每一个左括号 ( 就对应着该group的编号

深度评价:

其实,上图这种写法,是不好的写法
应该用name group 去写,逻辑更清楚

完整代码如下:



import re

inputDomainStr = "www.crifan.com"
domainP = "(?P<wholeDomain>(?P<subDomain>www).(?P<hostOrg>(?P<host>crifan).(?P<org>com)))"
foundDomain = re.search(domainP, inputDomainStr)
if foundDomain:
wholeMatchStr = foundDomain.group(0)
print("wholeMatchStr=%s" % wholeMatchStr)

wholeDomain = foundDomain.group("wholeDomain")
print("wholeDomain=%s" % wholeDomain)
subDomain = foundDomain.group("subDomain")
print("subDomain=%s" % subDomain)
hostOrg = foundDomain.group("hostOrg")
print("hostOrg=%s" % hostOrg)
host = foundDomain.group("host")
print("host=%s" % host)
org = foundDomain.group("org")
print("org=%s" % org)

# wholeMatchStr=www.crifan.com
# wholeDomain=www.crifan.com
# subDomain=www
# hostOrg=crifan.com
# host=crifan
# org=com

print("="*80)


进一步的优化:

(1)点
上面的点 . 其实是能匹配到任意字符,而不仅仅是 点 本身,而此处本意是 只匹配点本身,所以应该优化为 \.

(2)匹配更多域名
如果要匹配其他更多域名,比如:

book.crifan.com
www.crifan.org

等情况,则可以用如下代码:



InputDomainList = [
"www.crifan.com",
"book.crifan.com",
"wiki.crifan.com",
"www.crifan.net",
"www.crifan.org",
]

for curIdx, eachDomainStr in enumerate(InputDomainList):
print("%s %s %s" % ("-"*20, curIdx, "-"*20))
print("eachDomainStr=%s" % eachDomainStr)
multiDomainP = "(?P<wholeDomain>(?P<subDomain>\w+).(?P<hostOrg>(?P<host>\w+).(?P<org>\w+)))"
foundMultiDomain = re.search(multiDomainP, eachDomainStr)
if foundMultiDomain:
curWholeMatchStr = foundMultiDomain.group(0)
print("curWholeMatchStr=%s" % curWholeMatchStr)

curWholeDomain = foundMultiDomain.group("wholeDomain")
print("curWholeDomain=%s" % curWholeDomain)
curSubDomain = foundMultiDomain.group("subDomain")
print("curSubDomain=%s" % curSubDomain)
curHostOrg = foundMultiDomain.group("hostOrg")
print("curHostOrg=%s" % curHostOrg)
curHost = foundMultiDomain.group("host")
print("curHost=%s" % curHost)
curOrg = foundMultiDomain.group("org")
print("curOrg=%s" % curOrg)

# -------------------- 0 --------------------
# eachDomainStr=www.crifan.com
# curWholeMatchStr=www.crifan.com
# curWholeDomain=www.crifan.com
# curSubDomain=www
# curHostOrg=crifan.com
# curHost=crifan
# curOrg=com
# -------------------- 1 --------------------
# eachDomainStr=book.crifan.com
# curWholeMatchStr=book.crifan.com
# curWholeDomain=book.crifan.com
# curSubDomain=book
# curHostOrg=crifan.com
# curHost=crifan
# curOrg=com
# -------------------- 2 --------------------
# eachDomainStr=wiki.crifan.com
# curWholeMatchStr=wiki.crifan.com
# curWholeDomain=wiki.crifan.com
# curSubDomain=wiki
# curHostOrg=crifan.com
# curHost=crifan
# curOrg=com
# -------------------- 3 --------------------
# eachDomainStr=www.crifan.net
# curWholeMatchStr=www.crifan.net
# curWholeDomain=www.crifan.net
# curSubDomain=www
# curHostOrg=crifan.net
# curHost=crifan
# curOrg=net
# -------------------- 4 --------------------
# eachDomainStr=www.crifan.org
# curWholeMatchStr=www.crifan.org
# curWholeDomain=www.crifan.org
# curSubDomain=www
# curHostOrg=crifan.org
# curHost=crifan
# curOrg=org



附录,我写的教程,你可以看看:

1.关于正则本身的
应用广泛的超强搜索:正则表达式


2.关于python的正则re的:
Python中正则表达式:re模块详解
DuskCrow_ 2020-12-15
  • 打赏
  • 举报
回复
完整匹配 0-14 www.ifcode.com 分组 1. 0-14 www.ifcode.com 分组 2. 0-3 www 分组 3. 4-14 ifcode.com 分组 4. 4-10 ifcode 分组 5. 11-14 com 选择: A
0x 0101 2020-12-15
  • 打赏
  • 举报
回复
ifcode.com

37,744

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧