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

时间:2017-11-30 00:56:49

标签: 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 sixpence
>>> farmer's boy of sixpence

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

3 个答案:

答案 0 :(得分:2)

字符串不一样。

$users = personal_info::where(DB::raw("(DATE_FORMAT(created_at,'%Y'))"),date('Y')) ->get(); 包含 $users = DB::table('personal_infos')->join('evaluations','evaluations.user_id', '=', 'personal_infos.id') ->select((raw("(DATE_FORMAT(personal_infos.created_at,'%Y'))"),date('Y')), 'evaluations.recommendation', '=', 'Yes') ->get(); ,而s包含b匹配任何非'[^a-zA-Z' ]a-zA-Z(空格)的内容。这与'中的匹配。

答案 1 :(得分:1)

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

>>> 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和{{1}}的值是否相同。

答案 2 :(得分:0)

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