如果不是python,请检查列表中的regex结果

2024-05-12 20:30:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个单词列表(甚至在一个对象中有2到3个单词)。我编译了一个正则表达式,将列表中的任何单词与随机字符串相匹配。如果匹配,则返回列表中的该对象,否则将对字符串执行另一个正则表达式以返回表达式。
我的代码:
“layouts”是单词列表,“layout\ re”使用列表中的单词匹配字符串“str”。如果ms出现在list中,则按原样返回ms,否则使用p表达式返回模式。你知道吗

def layout_corr(str):

    ms = layout_re.search(str)
    if ms in layouts:
       ms=ms

    else:
       p = re.compile(r'(?:\w+\s+){1,2}layout')
       ms = re.findall(p,str)
    return ms

我得到的输出是else语句的输出。
例如:-str = " no 804 8th main 2nd c cross hrbr layout 1st block"
列表包含“hrbr layout”,因此必须返回hrbr layout。但是函数返回"cross hrbr layout",这是由else语句计算的ms。。if语句有什么问题??你知道吗


Tags: 对象字符串re列表if表达式语句单词
2条回答

re.search返回匹配对象,而不是字符串,因此:

ms in layouts

将始终返回false。改用这个:

def layout_corr(str):
    ms = layout_re.search(str)
    if ms:
       return ms.group()    
    else:
       p = re.compile(r'((?:\w+\s+){1,2})layout')
       ms = re.findall(p,str)
       return ms

1)将ms=ms更改为return ms

2)为了“捕获”字符串"hrbr layout"-更改行:

p = re.compile(r'(?:\w+\s+){1,2}layout')

收件人:

p = re.compile(r' (\w+? layout)')

演示:

p = re.compile(r' (\w+? layout)')
ms = re.findall(p,"no  804  8th main 2nd c cross hrbr layout 1st block")
print(ms[0]) // prints: "hrbr layout"

相关问题 更多 >