对于某些字符串末尾包含(xyz)和[1]的字符串列,请在Python中删除这些字符

对于某些字符串末尾包含(xyz)和[1]的字符串列,请在Python中删除这些字符,python,regex,Python,Regex,我的df列包括一些字符串,这些字符串在括号中有附加字符,在某些字符串的末尾有方括号,对于这些字符串,我想删除括号、方括号和其中包含的所有字符 2367 CROSS THREADED 2368 ALL ABOUT ARBY [5]Res. 2369 EMILIA MEL [5]Res. 2360 DYNA REAVER (NSW)[5] 2362 PARTY MIX [5] 清理后的预期结果 2367

我的df列包括一些字符串,这些字符串在括号中有附加字符,在某些字符串的末尾有方括号,对于这些字符串,我想删除括号、方括号和其中包含的所有字符

2367            CROSS THREADED 
2368    ALL ABOUT ARBY [5]Res.
2369        EMILIA MEL [5]Res.
2360      DYNA REAVER (NSW)[5]
2362             PARTY MIX [5]
清理后的预期结果

2367            CROSS THREADED 
2368            ALL ABOUT ARBY
2369                EMILIA MEL
2360               DYNA REAVER
2362                 PARTY MIX
这有用吗

import re
before = "2369        EMILIA MEL [5]Res."
after = re.sub(r"\[.*", "", before).strip()
print(before)
print(after)
其中打印:

2369        EMILIA MEL [5]Res.
2369        EMILIA MEL
['2369        EMILIA MEL [5]Res.', '2360      DYNA REAVER (NSW)[5]']
['2369        EMILIA MEL', '2360      DYNA REAVER']
                   before           after
0          CROSS THREADED  CROSS THREADED
1  ALL ABOUT ARBY [5]Res.  ALL ABOUT ARBY
2      EMILIA MEL [5]Res.      EMILIA MEL
3    DYNA REAVER (NSW)[5]     DYNA REAVER
4           PARTY MIX [5]       PARTY MIX

更新

根据您的评论,您希望删除
[
后的所有内容:

import re
before = [
    "2369        EMILIA MEL [5]Res.",
    "2360      DYNA REAVER (NSW)[5]"
]
after = [re.sub(r"(\(|\[).*", "", b).strip() for b in before]
print(before)
print(after)
其中打印:

2369        EMILIA MEL [5]Res.
2369        EMILIA MEL
['2369        EMILIA MEL [5]Res.', '2360      DYNA REAVER (NSW)[5]']
['2369        EMILIA MEL', '2360      DYNA REAVER']
                   before           after
0          CROSS THREADED  CROSS THREADED
1  ALL ABOUT ARBY [5]Res.  ALL ABOUT ARBY
2      EMILIA MEL [5]Res.      EMILIA MEL
3    DYNA REAVER (NSW)[5]     DYNA REAVER
4           PARTY MIX [5]       PARTY MIX

更新2

下面是一个如何在
pandas.DataFrame上使用它的示例:

import pandas as pd
import re

df = pd.DataFrame({"before": [
    "CROSS THREADED",
    "ALL ABOUT ARBY [5]Res.",
    "EMILIA MEL [5]Res.",
    "DYNA REAVER (NSW)[5]",
    "PARTY MIX [5]",
]})

df["after"] = df["before"].apply(
    lambda s: re.sub(r"(\(|\[).*", "", s).strip())
print(df)
其中打印:

2369        EMILIA MEL [5]Res.
2369        EMILIA MEL
['2369        EMILIA MEL [5]Res.', '2360      DYNA REAVER (NSW)[5]']
['2369        EMILIA MEL', '2360      DYNA REAVER']
                   before           after
0          CROSS THREADED  CROSS THREADED
1  ALL ABOUT ARBY [5]Res.  ALL ABOUT ARBY
2      EMILIA MEL [5]Res.      EMILIA MEL
3    DYNA REAVER (NSW)[5]     DYNA REAVER
4           PARTY MIX [5]       PARTY MIX

更新3

正如评论中指出的,您也可以直接使用:

df["after"] = df["before"].str.replace(r"( )*(\(|\[).*", "")
这可能对你有帮助

def trim(string):
    string = string.split('(')[0]
    string = string.split('[')[0]
    return string.strip()

df['CROSS THREADED'] = df['CROSS THREADED'].apply(lambda row: trim(string=row))

以及在[]或()后面的文本,例如在“关于阿比的一切”行中,结尾显然有“Res.”(除非这是某种工件)?是的-基本上所有的内容都是尾随的[或(我想删除。尝试
df['col']=df['col'].str.replace(r'\s*(?:\[^][]*].\([^()]*\)\s*$,'')
我需要在数据帧的整列上调用它,那么您建议如何运行它呢?我得到一个TypeError:预期的字符串或字节如下object@Jayjayyy你知道,有一个str.replace,用来替换regex。