我正在使用Pythex来测试两个正则表达式,我得到了我希望在Pythex中得到的结果,但是,当我在控制台中运行这些正则表达式测试字符串或运行程序时,我不会# 39;得到我期待的比赛。
第一个正则表达式应该检查字符串是否有一对在字符串中至少出现两次的字母(但这对不重叠)。所以," xyxy"和#34; aabcdefgaa"是有效的,而" aaa"不是,因为a重叠。以下是Pythex正则表达式的链接,它正在工作:http://pythex.org/?regex=(.)%7B1%7D。(。)%7B1%7D。%5C1。%5C2。&安培; test_string = qjhvhtzxzqqjkmpb&安培;忽略大小写= 0&安培;多行= 0&安培; DOTALL = 0&安培;冗长= 0。这是同一个正则表达式的控制台输出。 python控制台中的字符串(2.7):
>>> import re
>>> pair_of_letters = re.compile('(.){1}.*(.){1}.*\1.*\2.*')
>>> string = "qjhvhtzxzqqjkmpb"
>>> match = pair_of_letters.match(string); print match
None
第二个正则表达式应该检查字符串是否有一对字母,它们之间只有一个字符,例如" xyx"," abcdefeghi"或" AAA&#34 ;.再一次,这里是Pythex的链接:http://pythex.org/?regex=(.)%7B1%7D.%7B1%7D%5C1&test_string=qjhvhtzxzqqjkmpb&ignorecase=0&multiline=0&dotall=0&verbose=0而且我已经粘贴了Python控制台输出:
>>> repeated_letter_with_one_between = re.compile('(.){1}.{1}\1')
>>> string = "qjhvhtzxzqqjkmpb"
>>> match = repeated_letter_with_one_between.match(string); print match
None
有谁知道可能导致这种差异的原因是什么?提前谢谢。
答案 0 :(得分:1)
使用原始字符串定义正则表达式,或\1
将被解释为ASCII 01.
pair_of_letters = re.compile(r'(.).*(.).*\1.*\2.*')
repeated_letter_with_one_between = re.compile(r'(.).\1')
举例说明:
>>> "\1"
'\x01'
>>> r"\1"
'\\1'
>>> print("\1")
�
>>> print(r"\1")
\1