Python:如果括号序列和其中的内容仅位于字符串的末尾,请删除它们

Python:如果括号序列和其中的内容仅位于字符串的末尾,请删除它们,python,regex,Python,Regex,我想删除括号和里面的内容,只要它们在字符串的末尾。让我们举三个例子: s1 = 'BkToCstmrStmt/Stmt/Ntry[2]/NtryDtls/TxDtls/RltdPties/Cdtr/PstlAdr/AdrLine[2][]' s2 = "BkToCstmrStmt/Stmt/Ntry[2]/AmtDtls/InstdAmt/Amt['CHF']" s3 = "BkToCstmrStmt/Stmt/Bal[1]/Amt['CHF']" 我想

我想删除括号和里面的内容,只要它们在字符串的末尾。让我们举三个例子:

s1 = 'BkToCstmrStmt/Stmt/Ntry[2]/NtryDtls/TxDtls/RltdPties/Cdtr/PstlAdr/AdrLine[2][]'
s2 = "BkToCstmrStmt/Stmt/Ntry[2]/AmtDtls/InstdAmt/Amt['CHF']"
s3 = "BkToCstmrStmt/Stmt/Bal[1]/Amt['CHF']"
我想去

s1 = 'BkToCstmrStmt/Stmt/Ntry[2]/NtryDtls/TxDtls/RltdPties/Cdtr/PstlAdr/AdrLine'
s2 = "BkToCstmrStmt/Stmt/Ntry[2]/AmtDtls/InstdAmt/Amt"
s3 = "BkToCstmrStmt/Stmt/Bal[1]/Amt"
以下是我尝试过的:

name_parts = re.findall(r'[^\W_]+|[\W_]+', s3)

print(name_parts)

lenght = len(name_parts) - 1
    # we want to analize the last element of the list, if it contains '_-'
if lenght >= 0:  # it is to prevent an error if we have '' so an dimension '-1'
        # We do a loop while to test if the parts have '-_', if true we execute the loop
        # until it is false
    while re.match('[^A-Za-z/]', name_parts[lenght]) or re.match('[^A-Za-z/]', name_parts[lenght-1]) :
            # if it is true it will remove them
            name_parts[lenght] = ''  # it will remove them
            print(name_parts)
            lenght -= 1  # if the condition was true, we continue with one inferior part
else:
    pass

new_string = ''.join(map(str, name_parts))  # now that we have cleaned if it was necessary
    # we concatenate them
但它不起作用。有人有办法有效地做到这一点吗?

印刷品:

BkToCstmrStmt/Stmt/Ntry[2]/NtryDtls/TxDtls/RltdPties/Cdtr/PstlAdr/AdrLine
BkToCstmrStmt/Stmt/Ntry[2]/AmtDtls/InstdAmt/Amt
BkToCstmrStmt/Stmt/Bal[1]/Amt
:

印刷品:

BkToCstmrStmt/Stmt/Ntry[2]/NtryDtls/TxDtls/RltdPties/Cdtr/PstlAdr/AdrLine
BkToCstmrStmt/Stmt/Ntry[2]/AmtDtls/InstdAmt/Amt
BkToCstmrStmt/Stmt/Bal[1]/Amt

这里有一种非正则表达式的方法:

s1 = 'BkToCstmrStmt/Stmt/Ntry[2]/NtryDtls/TxDtls/RltdPties/Cdtr/PstlAdr/AdrLine[2][]'
s2 = "BkToCstmrStmt/Stmt/Ntry[2]/AmtDtls/InstdAmt/Amt['CHF']"
s3 = "BkToCstmrStmt/Stmt/Bal[1]/Amt['CHF']"

for s in (s1, s2, s3):
    while s.endswith(']'):
        s = s[:s.rfind('[')]
    print(s)
印刷品

BkToCstmrStmt/Stmt/Ntry[2]/NtryDtls/TxDtls/RltdPties/Cdtr/PstlAdr/AdrLine
BkToCstmrStmt/Stmt/Ntry[2]/AmtDtls/InstdAmt/Amt
BkToCstmrStmt/Stmt/Bal[1]/Amt

这里有一种非正则表达式的方法:

s1 = 'BkToCstmrStmt/Stmt/Ntry[2]/NtryDtls/TxDtls/RltdPties/Cdtr/PstlAdr/AdrLine[2][]'
s2 = "BkToCstmrStmt/Stmt/Ntry[2]/AmtDtls/InstdAmt/Amt['CHF']"
s3 = "BkToCstmrStmt/Stmt/Bal[1]/Amt['CHF']"

for s in (s1, s2, s3):
    while s.endswith(']'):
        s = s[:s.rfind('[')]
    print(s)
印刷品

BkToCstmrStmt/Stmt/Ntry[2]/NtryDtls/TxDtls/RltdPties/Cdtr/PstlAdr/AdrLine
BkToCstmrStmt/Stmt/Ntry[2]/AmtDtls/InstdAmt/Amt
BkToCstmrStmt/Stmt/Bal[1]/Amt

这里的一个关键细节是使用美元符号表示字符串的结尾。这里的一个关键细节是使用美元符号表示字符串的结尾