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

Python 使用正则表达式匹配字符串中单词的最后3个字母,python,regex,string,Python,Regex,String,我有一个字符串“cough\tbough”或“qood erat demonstrandum”\ 女士们,先生们,我的备忘录到此结束。”。我需要检查这句话的最后三个字母是否相等。但是反斜杠把我弄糊涂了 pairOfLines="cough\tbough" pattern = ????? match = re.match(pattern, pairOfLines) return match.group(1) == match.group(2) 您可以拆分: pairOfLines="cough\

我有一个字符串“cough\tbough”或“qood erat demonstrandum”\ 女士们,先生们,我的备忘录到此结束。”。我需要检查这句话的最后三个字母是否相等。但是反斜杠把我弄糊涂了

pairOfLines="cough\tbough"
pattern = ?????
match = re.match(pattern, pairOfLines)
return match.group(1) == match.group(2)
您可以拆分:

pairOfLines="cough\tbough"
val1, val2 = pairOfLines.split("\t")
if val1[-3:] == val2[-3:]:
   #do something
但是,如果要实现正则表达式,可以使用
re.split()

  • *?
    -匹配第一组之前的任何内容
  • (\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
      -单词边界
您可以使用正则表达式两次匹配捕获文本

pairOfLines="cough\tbough"
pattern = r'(\w{3})\b.*?\1\b'
match = re.search(pattern, pairOfLines)
# match.group(1) = 'ugh'
match将返回match对象,如果它两次填充匹配最后3个字符的正则表达式,否则它将不返回任何对象

例如,如果pairOfLines=“cough\toughs”,则match将返回None

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

不太清楚这个问题?你为什么需要regrex?你真的有一个带反斜杠的字符串,还是字符串包含制表符?这是一个任务,我需要解决。我需要使用regexp match来解决它。这感觉像是一个家庭作业问题。如果是,您应该对此很清楚。提示:目标字符串中的反斜杠看起来像“\t”的一部分,这通常是对输出字符串上的制表符进行printf样式编码的方式。您好,谢谢您的回答。我需要使用match而不是Split,以及如何编写regexp,其中匹配“quod erat demonstrandum”,女士们先生们,这就是我备忘录的结尾。我需要比较每封信的最后3个字母part@AvoAsatryan老实说,这项修改并不遥远,但我强烈建议先尝试一下,如果不奏效,就提出一个新问题。祝你一切顺利:)
pairOfLines="cough\tbough"

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