我有一个看起来像这样的代码
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
我试图编写一个代码来消除除撇号之外的所有标点符号,我不明白为什么正则表达式为同一组字符串返回不同的结果。为什么会这样?
答案 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-z
或A-Z
(空格)的内容。这与'
中的匹配。
答案 1 :(得分:1)
正如其他人所说,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
和{{1}}的值是否相同。
答案 2 :(得分:0)
第一个字符串是右侧单引号,第二个字符串是撇号。您可以检查字符值here