我正在尝试使用正则表达式根据精确匹配在句子中找到单词。例如:
Sentence1 = 'keyword1 is my keyword, keyworda , keyword- and keyword+'
Sentence2 = 'This is my keyword2 , keywordakeyword2andkeyword+'
Sentence3 = 'This is my keywordakeywordandkeyword2'
另一个标准是检查行首和中间是否出现keyword
。
句子/行正则表达式的开头
regex 1 = re.compile(r"^keyword1\b",re.MULTILINE | re.IGNORECASE)
这是行正则表达式的中间:
regex2 = re.compile(r"(?!^)keyword2\b",re.MULTILINE | re.IGNORECASE)
regex1应该返回关键字1和句子1中的位置
regex2应该返回关键字2(在句子2中出现)和位置。请注意,关键字2在句子2中的第二次出现被嵌入在其他字符串之间
regex2应该从句子2的第二行返回keyword2
我可能可以使用字符串比较,但是我还需要获取keyword
的位置..因此尝试使用正则表达式。
答案 0 :(得分:1)
正则表达式1
您可以将此正则表达式与环顾四周一起使用:
(?<!\S)keyword1(?!\S)
RegEx详细信息:
(?<!\S)
:声明我们在前面的位置没有非空格字符keyword
:匹配keyword1
(?!\S)
:声明我们前面没有非空格字符正则表达式2
(?!^)keyword2
RegEx详细信息:
(?!^)
:声明我们不在行首keyword2
:匹配keyword2
对于编码,我建议在返回的re.search
中使用python
函数,然后再使用start()
和end()
函数来获取匹配的位置。
答案 1 :(得分:0)
您可以使用正则表达式
'keyword[\d]'
编译正则表达式
regobj = re.compile('keyword[\d]')
要在句子开头找到匹配项,请使用在已编译对象上调用的 match 函数。只有在开头找到匹配项时,它才会返回匹配的对象。
match = regobj.match(sentence1)
要在句子中查找匹配项,请在编译对象上使用finditer函数
it = regobj.finditer(sentence2)
match = it.__next__()
match.start()
start()函数返回该匹配项的起始索引,并返回迭代器对象上句子调用next()函数内的其他匹配项