RegEx:如何匹配Prefix+Shared或Shared+Postfix?

2024-06-26 11:06:03 发布

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

假设我想匹配:

PREFIXsomething

或:

somethingPOSTFIX

但肯定不是:

PREFIXsomethingPOSTFIX

其中,某物是某种共享模式,而前缀/后缀实际上也是某种不同的模式。你知道吗

我可以(或认为)用Python解决这个问题。但是,此构造适用于“PREFIXabc”,但不适用于“abcPOSTFIX”。如何解决这个问题?你知道吗

import re 

prefix_pattern = "PREFIX" 
postfix_pattern = "POSTFIX"
shared_pattern = "[a-zA-z]*"
test_pattern ="("+prefix_pattern+shared_pattern+")|("+shared_pattern+postfix_pattern+")$"

pattern = re.compile(test_pattern)

#test = 'PREFIXabc' # Match
test = 'abcPOSTFIX' # No match

x = re.match(pattern,test)
if x:
    print(x.group())
else:
    print("Not found")

Tags: testreprefixmatch模式后缀postfixshared
1条回答
网友
1楼 · 发布于 2024-06-26 11:06:03

注意,当与re.match一起使用时,您的模式遵循类似^(alternative1)|^(alternative2)$的模式。这意味着字符串锚定的$端只影响第二种选择,在test = 'PREFIXabc123'^{} will get matched。你知道吗

根据您的需求,有两种解决方法。你知道吗

您需要删除$,然后在test = 'abcPOSTIFX123'中匹配abcPOSTFIX,或者将两个备选方案分组:

test_pattern=r"(?:{0}{1}|{1}{2})$".format(prefix_pattern, shared_pattern, postfix_pattern)

然后,将再也找不到部分匹配项。你知道吗

还有,如果prefix_patternshared_patternpostfix_pattern是文本字符串,不要忘记使用re.escape()。你知道吗

相关问题 更多 >