gpt4 book ai didi

python - 正则表达式检查它是否恰好是一个单词

转载 作者:太空宇宙 更新时间:2023-11-03 13:28:45 26 4
gpt4 key购买 nike

我基本上是在尝试匹配字符串模式(通配符匹配)请仔细看这个——

*(星号)- 表示恰好一个词。

这不是正则表达式模式...这是约定。

所以,如果有这样的模式 -

*.key - '.key.' is preceded by exactly one word(word containing no dots)
*.key.* - '.key.' is preceded and succeeded by exactly one word having no dots
key.* - '.key' preceeds exactly one word .

所以,

"door.key" matches "*.key"
"brown.door.key" doesn't match "*.key".
"brown.key.door" matches "*.key.*"
but "brown.iron.key.door" doesn't match "*.key.*"

因此,当我在模式中遇到“*”时,我将其替换为正则表达式,这样它就意味着它正好是一个词。(a-zA-z0-9_)。谁能帮我在 python ?

最佳答案

要将您的模式转换为正则表达式,您首先需要确保每个字符都按字面解释而不是特殊字符。我们可以通过在任何 re 特殊字符前插入一个 \ 来做到这一点。这些字符可以通过 sre_parse.SPECIAL_CHARS 获取。

由于 * 有特殊含义,我们不想转义它,而是用 \w+ 替换它。

代码

import sre_parse

def convert_to_regexp(pattern):
special_characters = set(sre_parse.SPECIAL_CHARS)
special_characters.remove('*')

safe_pattern = ''.join(['\\' + c if c in special_characters else c for c in pattern ])

return safe_pattern.replace('*', '\\w+')

例子

import re

pattern = '*.key'
r_pattern = convert_to_regexp(pattern) # '\\w+\\.key'

re.match(r_pattern, 'door.key') # Match
re.match(r_pattern, 'brown.door.key') # None

这是一个带有转义特殊字符的例子

pattern = '*.(key)'
r_pattern = convert_to_regexp(pattern) # '\\w+\\.\\(key\\)'

re.match(r_pattern, 'door.(key)') # Match
re.match(r_pattern, 'brown.door.(key)') # None

旁注

如果您打算使用 re.searchre.findall 查找输出模式,您可能希望将 re 模式包装在\b 边界字符。

关于python - 正则表达式检查它是否恰好是一个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50939856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com