正则表达式:如果字符串以数值结尾 - 删除它,或者如果字符串以单个字母结尾 - 删除它,或者保留它
Regex: if string ends with numerical values - drop it, OR if string ends with single letter - drop it, OR leave it
这是我拥有的数据集示例:
ID
Project
1
21st Townhouse 318
2
The Residences 6
3
Villanova Tower B
4
The Hills H
5
City Park
我需要转换 'Project' 列,以便:
- 如果一行以数值结尾,则应将其删除
- 如果一行以单个字母结尾,则应将其删除
- 否则,保持原样
这是我想要的样子:
ID
Project
1
21st Townhouse
2
The Residences
3
Villanova Tower
4
The Hills
5
City Park
我试图搜索一些解决方案,并找到了这个(第一个条件只有数值):
df['Project']=df.Project[~((df.Project.astype(str).str.match("(.*\d)")) & (df.Project.astype(str).str.len() > 1))]
它起作用了,但是,我也尝试将它应用于第二个条件:
df['Project']=df.Project[~((df.Project.astype(str).str.match("(.*\w)")) & (df.Project.astype(str).str.len() == 1))]
但是,失败了
你能帮帮我吗?
谢谢!
您可以使用
df['Project']=df['Project'].str.replace(r'\s+(?:\d+|[A-Za-z])$', '', regex=True)
参见regex demo。
详情:
\s+
- 一个或多个空格
(?:\d+|[A-Za-z])
- non-capturing 组匹配
\d+
- 一位或多位数字
|
- 或
[A-Za-z]
- ASCII 字母(使用 [^\W\d_]
匹配任何 Unicode 字母)
$
- 字符串结尾。
如果您的字符串在最后一个 number/letter 之前没有空格,您可以使用
df['Project'].str.replace(r'\b(?:\d+|[A-Za-z])$', '', regex=True).str.rstrip()
\b
匹配单词边界,确保在最后一个 digits/letter 之前没有字母、数字或 _
,.str.rstrip()
将去除尾随空格.
这是我拥有的数据集示例:
ID | Project |
---|---|
1 | 21st Townhouse 318 |
2 | The Residences 6 |
3 | Villanova Tower B |
4 | The Hills H |
5 | City Park |
我需要转换 'Project' 列,以便:
- 如果一行以数值结尾,则应将其删除
- 如果一行以单个字母结尾,则应将其删除
- 否则,保持原样
这是我想要的样子:
ID | Project |
---|---|
1 | 21st Townhouse |
2 | The Residences |
3 | Villanova Tower |
4 | The Hills |
5 | City Park |
我试图搜索一些解决方案,并找到了这个(第一个条件只有数值):
df['Project']=df.Project[~((df.Project.astype(str).str.match("(.*\d)")) & (df.Project.astype(str).str.len() > 1))]
它起作用了,但是,我也尝试将它应用于第二个条件:
df['Project']=df.Project[~((df.Project.astype(str).str.match("(.*\w)")) & (df.Project.astype(str).str.len() == 1))]
但是,失败了
你能帮帮我吗? 谢谢!
您可以使用
df['Project']=df['Project'].str.replace(r'\s+(?:\d+|[A-Za-z])$', '', regex=True)
参见regex demo。
详情:
\s+
- 一个或多个空格(?:\d+|[A-Za-z])
- non-capturing 组匹配\d+
- 一位或多位数字|
- 或[A-Za-z]
- ASCII 字母(使用[^\W\d_]
匹配任何 Unicode 字母)
$
- 字符串结尾。
如果您的字符串在最后一个 number/letter 之前没有空格,您可以使用
df['Project'].str.replace(r'\b(?:\d+|[A-Za-z])$', '', regex=True).str.rstrip()
\b
匹配单词边界,确保在最后一个 digits/letter 之前没有字母、数字或 _
,.str.rstrip()
将去除尾随空格.