我的模式是“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)
它匹配,但它不应该匹配。
有办法解决吗?
谢谢,亚历克斯
4条答案
按热度按时间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。vh0rcniy2#
你可以试试这个。
kulphzqa3#
您说它应该匹配 “trace_巴塞尔”,但您提供的字母是 “bsel”。
这可能是错误。
或者,它应该是“bsel”。如果不匹配,则需要添加^字符。
此外,如果您不需要捕获,可以使用 ?: 指定符。
yiytaume4#
我相信这个点有一个特殊的正则表达式的含义。通过执行“.”来跳过“,”。