我有一个字符串" cough \ tbough"或者" quod erat demonstrandum \ 女士们,先生们,这是我的备忘录的结尾"。我需要检查这句话的最后几个字的最后3个字母是否相等。但反斜杠让我感到困惑。
pairOfLines="cough\tbough"
pattern = ?????
match = re.match(pattern, pairOfLines)
return match.group(1) == match.group(2)
答案 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
- 结尾
边界