查找句子中字符串的完全匹配

时间:2019-09-11 18:05:52

标签: python regex

我正在尝试使用正则表达式根据精确匹配在句子中找到单词。例如:

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的位置..因此尝试使用正则表达式。

2 个答案:

答案 0 :(得分:1)

正则表达式1

您可以将此正则表达式与环顾四周一起使用:

(?<!\S)keyword1(?!\S)

RegEx Demo 1

RegEx详细信息:

  • (?<!\S):声明我们在前面的位置没有非空格字符
  • keyword:匹配keyword1
  • (?!\S):声明我们前面没有非空格字符

正则表达式2

(?!^)keyword2

RegEx Demo 2

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()函数内的其他匹配项