Python 正则表达式,在特定符号后修剪,忽略没有该符号的列表项

Python 正则表达式,在特定符号后修剪,忽略没有该符号的列表项,python,regex,Python,Regex,我的输出是['INR 2000=2E00'],['INR 12000=2E400','NFS*现金'],['INR 2000=2E0d0'] 我只想要INR后面的数字。例如,['INR 2000'、'INR 12000'、'INR 2000']。我应该对正则表达式进行哪些更改 我尝试过使用str(借记),但没有成功。您可以使用一个简单的正则表达式匹配INR+空格(如果有)+任何带有,的数字作为分隔符: file = open('SMSm.txt', 'r') file2 = open('SMSw

我的输出是['INR 2000=2E00'],['INR 12000=2E400','NFS*现金'],['INR 2000=2E0d0']

我只想要INR后面的数字。例如,['INR 2000'、'INR 12000'、'INR 2000']。我应该对正则表达式进行哪些更改


我尝试过使用str(借记),但没有成功。

您可以使用一个简单的正则表达式匹配
INR
+空格(如果有)+任何带有
的数字作为分隔符:

file = open('SMSm.txt', 'r')
file2 = open('SMSw.txt', 'w')
debited=[]
for line in file.readlines(): 
    if 'debited with' in line:  
        import re
        a= re.findall(r'[INR]\S*', line)
        debited.append(a)
        file2.write(line)

print re.findall(r'^(.*?)(=)?$', (debited)
使用
findall
,所有捕获的文本将作为列表输出

如果要将
INR
作为输出的一部分,只需从模式中删除捕获圆括号:

更新

刚刚尝试了一个(如果有没有
=
的条目,则容易出现位错误),如下所示:

import re
s = "[['INR 2,000=2E00']['INR 12,000=2E400', 'NFS*Cash']['INR 2,000=2E0d0']]"
t = re.findall(r"INR\s*(\d+(?:,\d+)*)", s)
print(t) 
# Result: ['2,000', '12,000', '2,000']

您可以使用一个简单的正则表达式匹配
INR
+空格(如果有)+任何带有
的数字作为分隔符:

file = open('SMSm.txt', 'r')
file2 = open('SMSw.txt', 'w')
debited=[]
for line in file.readlines(): 
    if 'debited with' in line:  
        import re
        a= re.findall(r'[INR]\S*', line)
        debited.append(a)
        file2.write(line)

print re.findall(r'^(.*?)(=)?$', (debited)
使用
findall
,所有捕获的文本将作为列表输出

如果要将
INR
作为输出的一部分,只需从模式中删除捕获圆括号:

更新

刚刚尝试了一个(如果有没有
=
的条目,则容易出现位错误),如下所示:

import re
s = "[['INR 2,000=2E00']['INR 12,000=2E400', 'NFS*Cash']['INR 2,000=2E0d0']]"
t = re.findall(r"INR\s*(\d+(?:,\d+)*)", s)
print(t) 
# Result: ['2,000', '12,000', '2,000']

给定您已有的代码,最简单的解决方案是使提取的字符串以
INR开始(它已经开始了),并在等号之前结束。只要换掉这条线

t = [x[0:x.find("=")].strip("'") for x in s.strip("[]").replace("][", "?").split("?")]
print(t)
为此:

a= re.findall(r'[INR]\S*', line)

给定您已有的代码,最简单的解决方案是使提取的字符串以
INR开始(它已经开始了),并在等号之前结束。只要换掉这条线

t = [x[0:x.find("=")].strip("'") for x in s.strip("[]").replace("][", "?").split("?")]
print(t)
为此:

a= re.findall(r'[INR]\S*', line)

听起来您想匹配文字
INR
,而不是
[INR]
。可以尝试以下操作:
\bINR\s+\d+(?:,\d+)*
@Jonny5我有行,但我想修剪输出。为此,我使用了print re.findall(r'^(.*?)?$,(借记)。但是使用expression@Jonny5当我使用你建议的正则表达式时,我的编译器会给出一个空[]的列表。如何:
\S+(?==)
=/code>试试:
p=re.compile(ur'\S+(?==))
re.findall(p,test\u str)
成功了。谢谢。听起来你想匹配文字
INR
而不是
[INR]
。可以试试:
\bINR\s+\d+(?:,\d+)*
@Jonny5我有行,但我想修剪输出。为此,我使用了print re.findall(r'^(.*)?$,(借记).但是我在使用expression@Jonny5当我使用你建议的正则表达式时,我的编译器会给出一个空[]的列表。如何:
\S+(?==)
=/code>试试:
p=re.compile(ur'\S+(?==))
re.findall(p,test\u str)
它成功了。谢谢。