使用正则表达式匹配字符串中单词的最后3个字母

时间:2017-08-30 21:26:55

标签: python regex string

我有一个字符串" cough \ tbough"或者" quod erat demonstrandum \ 女士们,先生们,这是我的备忘录的结尾"。我需要检查这句话的最后几个字的最后3个字母是否相等。但反斜杠让我感到困惑。

pairOfLines="cough\tbough"
pattern = ?????
match = re.match(pattern, pairOfLines)
return match.group(1) == match.group(2)

3 个答案:

答案 0 :(得分:4)

你可以分开:

pairOfLines="cough\tbough"
val1, val2 = pairOfLines.split("\t")
if val1[-3:] == val2[-3:]:
   #do something

但是,如果要实现正则表达式,可以使用re.split()

import re

val1, val2 = re.split("\t", pairOfLines)
if val1[-3:] == val2[-3:]:
   #do something

答案 1 :(得分:4)

import re

pairOfLines="cough\tbough"

m = re.match(r'.*?(\w{3})\b.*?(\w{3})\b', pairOfLines)
print(m.groups())
('ugh', 'ugh')
  • .*? - 匹配第一组之前的任何内容
  • (\w{3})\b - 第一个捕获组,其中

    • \w{3} - 3个字母
    • \b - 字边界 - 表示字母必须位于末尾
  • .*? - 匹配第二组之前的任何内容

  • (\w{3})\b - 第二个捕获组,类似于第一个

你也可以使用re.findall来达到同样的效果:

pairOfLines="cough\tbough"

l = re.findall(r'(?:.*?(\w{3})\b)', pairOfLines)
print(l)
['ugh', 'ugh']
  • (?:...) - 非捕获外组
  • (\w{3})\b - 单独捕获组,其中
    • \w{3} - 3个字母
    • \b - 字边界

答案 2 :(得分:1)

您可以使用正则表达式backreference来匹配捕获文本两次

pairOfLines="cough\tbough"
pattern = r'(\w{3})\b.*?\1\b'
match = re.search(pattern, pairOfLines)
# match.group(1) = 'ugh'

匹配将返回匹配对象,如果它填满了匹配最后3个字符两次的正则表达式,否则它将返回无

例如,如果pairOfLines =" cough \ tough s ",匹配将返回无

  • (\w{3}) - 最后3个字符的第一个捕获组
  • \b - 结尾 字边界
  • .*?(\1) - 任何字符的非贪婪匹配 再次匹配第一个捕获组
  • \b - 结尾 边界