繁体   English   中英

搜索包含前导或尾随特殊字符的整个单词,例如 - 和=在python中使用正则表达式

[英]Searching for a whole word that contains leading or trailing special characters like - and = using regex in python

我试图在一个句子中知道一个字符串(单词)的位置。 我正在使用下面的功能。 这个功能适用于大多数单词但是对于这个字符串GLC-SX-MM=在句子中I have a lot of GLC-SX-MM= in my inventory list中没有办法得到匹配。 我试着scaping - 而且=但不行。 任何想法? 我无法使用空格分割句子,因为有时我会用空格分隔单词。

import re 

def get_start_end(self, sentence, key):
        r = re.compile(r'\b(%s)\b' % key, re.I)
        m = r.search(question)
        start = m.start()
        end = m.end()
        return start, end

在查找文字字符串时需要转义键,并确保使用明确的(?<!\\w)(?!\\w)边界:

import re 

def get_start_end(self, sentence, key):
    r = re.compile(r'(?<!\w){}(?!\w)'.format(re.escape(key)), re.I)
    m = r.search(question)
    start = m.start()
    end = m.end()
    return start, end

r'(?<!\\w){}(?!\\w)'.format(re.escape(key))将构建一个正则表达式(?<!\\w)abc\\.def\\=(?!\\w) abc.def=关键字,并且(?<!\\w)将失败任何匹配,如果关键字左边有一个单词char, (?!\\w)将失败任何匹配,如果有紧靠关键字右侧的单词char。

这不是实际答案,但有助于解决问题。

您可以动态获取模式以进行调试。

import re 

def get_start_end(sentence, key):
        r = re.compile(r'\b(%s)\b' % key, re.I)
        print(r.pattern)

sentence = "foo-bar is not foo=bar"

get_start_end(sentence, 'o-')
get_start_end(sentence, 'o=')

\b(o-)\b
\b(o=)\b

然后,您可以尝试手动匹配模式,如果匹配则使用https://regex101.com/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM