【问题标题】:How to delete some strings with non-English letters? [duplicate]如何删除一些非英文字母的字符串? [复制]
【发布时间】:2020-04-14 08:43:28
【问题描述】:

我是正则表达式和 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

我该如何解决这个问题?为什么会这样?

【问题讨论】:

标签: python regex string dataframe letter


【解决方案1】:

您有一个列表,并且想要过滤它以仅包含与某些条件匹配的元素,带有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 个或多个)

【讨论】:

    猜你喜欢
    • 2021-09-22
    • 2018-12-02
    • 2018-01-31
    • 2011-08-22
    • 1970-01-01
    • 2013-07-01
    • 2011-04-08
    • 1970-01-01
    • 2020-06-14
    相关资源
    最近更新 更多