如何删除一些非英语字母的字符串?

2024-10-01 07:39:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我不熟悉正则表达式,python。例如,我的字符串列表是:

my_try = ['Aas','1Aasdf','cc)','ASD','.ASD','aaaa1','A']

现在,我想删除所有带有非英语字母的字符串。所以,我只想保持:

['Aas','ASD','A']

我不知道怎么用^或其他什么来做这个?有人能帮帮我吗?你知道吗

如果我的数据是:

my_try=pd.DataFrame({'try':
                         ['Aas','1Aasdf','cc)','A2SD','.ASD',
                          'aaaa1','A','123%']})

然后我使用:

[x for x in my_try if re.match(r'^[a-zA-Z]+$', x['try'])]

为什么我会有这样的错误:

Traceback (most recent call last):
  File "C:\feng\myCode\infoExtract\venv\lib\site-packages\IPython    \core\interactiveshell.py", line 3319, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-58-4bd95f31bd0c>", line 1, in <module>
    [x for x in my_try if re.match(r'^[a-zA-Z]+$', x['try'])]
  File "<ipython-input-58-4bd95f31bd0c>", line 1, in <listcomp>
    [x for x in my_try if re.match(r'^[a-zA-Z]+$', x['try'])]
 TypeError: string indices must be integers

有谁能告诉我怎么解决这个问题,为什么会这样?你知道吗


Tags: 字符串inreforifmymatchline
1条回答
网友
1楼 · 发布于 2024-10-01 07:39:53

如果您有一个列表,并且希望将其筛选为只包含符合某些条件的元素,则使用if的列表理解非常适合:

my_list = [1, 2, 3, 4, 5, 6]
# just even numbers:
print([x for x in my_list if x % 2 == 0])

您想筛选任何只包含字母“a”到“z”和“a”到“z”的内容,这是正则表达式易于使用的地方:

my_try = ['Aas','1Aasdf','cc)','ASD','.ASD','aaaa1','A']
print([x for x in my_try if re.match('^[a-zA-Z]+$', x)])

正则表达式以^开头,以$结尾,告诉re.match()它应该从头到尾匹配整个字符串。[a-zA-Z]定义一个字符类,其中包含您要查找的字母。通常你会使用\w,但这也包括数字。最后,+表示字符串中需要有1个或多个字符(如果使用*,则需要有0个或多个字符)

相关问题 更多 >