python regex match不起作用附上示例

dldeef67  于 2023-06-25  发布在  Python
关注(0)|答案(4)|浏览(145)

我的模式是“trace_.*(a|贝瑟尔|cl| CS| d的|ds| ls| SD|我们_n| q)$ -意思是:字符串应包含trace_<any_string> <only a或only bsel或,,,,或only we_n或only q>`END
我的s是“dfd_printf_trace_data”
例如,如果s=“dfd_printf_trace_data”,则它不应该匹配。如果s =“trace_printd”或trace_巴塞尔或trace_d,则应该匹配
我写了,但是不管用

import re s="dfd_printf_trace_data" 
pattern = r"trace_.*(a|bsel|cl|cs|d|ds|ls|sd|we_n|q)$" 
re.search(pattern, s)

它匹配,但它不应该匹配。
有办法解决吗?
谢谢,亚历克斯

wnavrhmk

wnavrhmk1#

re.search() searches for matches in substrings within the string.
你应该使用re.match()来检查整个字符串是否匹配你的正则表达式。
编辑:误解了你的问题。你有一个正则表达式的问题。我想你要找的正则表达式是trace_(a|bsel|cl|cs|d|ds|ls|sd|we_n|q){0,}$。选中https://regex101.com/,通过反复试验构建regex。

vh0rcniy

vh0rcniy2#

你可以试试这个。

import re

s = "dfd_printf_trace_data"
pattern = r"^trace_d(a|bsel|cl|cs|d|ds|ls|sd|we_n|q)$"
match = re.search(pattern, s)

if match:
    print("Matched")
else:
    print("No matched.")
kulphzqa

kulphzqa3#

您说它应该匹配 “trace_巴塞尔”,但您提供的字母是 “bsel”
这可能是错误。

trace_.*(a|basel|cl|cs|d|ds|ls|sd|we_n|q)$

或者,它应该是“bsel”。如果不匹配,则需要添加^字符。

^trace_.*(a|bsel|cl|cs|d|ds|ls|sd|we_n|q)$

此外,如果您不需要捕获,可以使用 ?: 指定符。

trace_.*(?:a|bsel|cl|cs|d|ds|ls|sd|we_n|q)$
yiytaume

yiytaume4#

我相信这个点有一个特殊的正则表达式的含义。通过执行“.”来跳过“,”。

相关问题