python 3中,正则表达式为同一字符串返回不同的结果

python 3中,正则表达式为同一字符串返回不同的结果,python,regex,python-3.x,Python,Regex,Python 3.x,我有一个这样的代码 import re s = "farmer’s boy of s...=--ixpence." b = "farmer's boy of s...=--ixpence." s_replaced = re.sub("[^a-zA-Z' ]+", '', s) b_replaced = re.sub("[^a-zA-Z' ]+", '', b) print(s_replaced) print(b_replaced) >>> farmers boy of si

我有一个这样的代码

import re

s = "farmer’s boy of s...=--ixpence."
b = "farmer's boy of s...=--ixpence."
s_replaced = re.sub("[^a-zA-Z' ]+", '', s)
b_replaced = re.sub("[^a-zA-Z' ]+", '', b)
print(s_replaced)
print(b_replaced)

>>> farmers boy of sixpence
>>> farmer's boy of sixpence

我试图编写一个代码,消除除撇号以外的所有标点符号,我不明白为什么正则表达式会对同一组字符串返回不同的结果。为什么会发生这种情况?

第一个字符串是右单引号,第二个是撇号。您可以检查字符值

第一个字符串是右单引号,第二个是撇号。您可以检查字符值

字符串不相同


s
包含
,而
b
包含
<代码>[^a-zA-Z']匹配任何不是
a-Z
a-Z
'
(空格)的内容。这与
'
匹配,在
s

中,字符串不相同


s
包含
,而
b
包含
<代码>[^a-zA-Z']匹配任何不是
a-Z
a-Z
'
(空格)的内容。这与
'
相匹配,正如其他人所说,
s
b
是不同的,因为它们都包含不同的撇号,
'
'
。这很容易检查:

>>> s = "farmer’s boy of s...=--ixpence."
>>> b = "farmer's boy of s...=--ixpence."
>>> s == b
False
>>> print([x for x in s if x not in b])
['’']
这表明
s
包含
'
撇号,但
b
不包含。为确保只比较相等的字符串,您需要事先进行初步检查:

s = "farmer’s boy of s...=--ixpence."
b = "farmer's boy of s...=--ixpence."

if s == b:
   print("Both strings are equal")
   # Rest of code here

在执行其他操作之前,检查
s
b
的值是否相同

正如其他人所说,
s
b
是不同的,因为它们都包含不同的撇号,
'
'
。这很容易检查:

>>> s = "farmer’s boy of s...=--ixpence."
>>> b = "farmer's boy of s...=--ixpence."
>>> s == b
False
>>> print([x for x in s if x not in b])
['’']
这表明
s
包含
'
撇号,但
b
不包含。为确保只比较相等的字符串,您需要事先进行初步检查:

s = "farmer’s boy of s...=--ixpence."
b = "farmer's boy of s...=--ixpence."

if s == b:
   print("Both strings are equal")
   # Rest of code here

在执行其他操作之前,检查
s
b
的值是否相同

那些字符串不一样。仔细看那些字符串<代码>“与
>>“s的农民的男孩..=--ixpence.”===“s的农民的男孩..=--ixpence.”不一样。
哦,哇,这太愚蠢了。。。我为此挣扎了两个小时。。。。这在我的PyCharm字体上不明显!谢谢tho@EricKim您可能应该先检查
s
b
,类似于
如果s==b:
,以确保两个字符串相同。这些字符串不相同。请仔细查看这些字符串<代码>“与
>>“s的农民的男孩..=--ixpence.”===“s的农民的男孩..=--ixpence.”不一样。
哦,哇,这太愚蠢了。。。我为此挣扎了两个小时。。。。这在我的PyCharm字体上不明显!谢谢tho@EricKim您可能应该先检查
s
b
,类似于
如果s==b:
,以确保两个字符串相同。