Python 如何从给定字符串中提取字符和数值?

Python 如何从给定字符串中提取字符和数值?,python,string,Python,String,我有以下字符串: '10000 ABC = 1 DEF' '1 AM = 0,30$' '3500 ABC = 1 GTY' '1000 HUYT=1ABC' '1 MONET Data = 1 ABC' 我想找到一种灵活的方法,从=的左右两侧提取数字和字符串值。我不知道所有可能的字符串值。因此,我不能预先定义它们。我知道的唯一一件事是左右两边被=分开 目标是为上述给定示例获得此结果: 字符串对: ABC-DEF AM-$ ABC-GTY HUYT-ABC MONET Data-ABC 10

我有以下字符串:

'10000 ABC = 1 DEF'
'1 AM = 0,30$'
'3500 ABC = 1 GTY'
'1000 HUYT=1ABC'
'1 MONET Data = 1 ABC'
我想找到一种灵活的方法,从
=
的左右两侧提取数字和字符串值。我不知道所有可能的字符串值。因此,我不能预先定义它们。我知道的唯一一件事是左右两边被
=
分开

目标是为上述给定示例获得此结果:

字符串对

ABC-DEF
AM-$
ABC-GTY
HUYT-ABC
MONET Data-ABC
10000-1
1-0.30
3500-1
1000-1
1-1
数字对

ABC-DEF
AM-$
ABC-GTY
HUYT-ABC
MONET Data-ABC
10000-1
1-0.30
3500-1
1000-1
1-1

我试图使用
.lstrip(“…”)
rstrip(“…”)
,但它没有给我预期的结果。

作为regex的替代方法,您可以做的是循环遍历每个字符串并提取相关字符。它可以沿着下面的思路看一些东西

def extract_string_pairs(source_string):
    string_pair = ''
    for c in source_string:
        if c.isalpha() or c == '$':
            string_pair += c
        elif c == '=':
            string_pair += '-'

    return string_pair

def extract_numeric_pairs(source_string):
    string_pair = ''
    for c in source_string:
        if c.isdigit():
            string_pair += c
        elif c == '.':
            string_pair += '.'
        elif c == '=':
            string_pair += '-'

    return string_pair

删除不需要的字符并将
=
替换为
-

import re

str = ['10000 ABC = 1 DEF',
    '1 AM = 0,30$',
    '3500 ABC = 1 GTY',
    '1000 HUYT=1ABC',
    '1 MONET Data = 1 ABC']

String_pairs = []
Numeric_pairs = []

for s in str:
    String_pairs.append (re.sub(r'\s*=\s*','-', re.sub(r'\s*\d+(,\d+)?\s*','', s)))
    Numeric_pairs.append (re.sub(r'\s*=\s*','-', re.sub(r'\s*[^\d,=]+\s*','', s)))

print String_pairs
print Numeric_pairs
结果:

['ABC-DEF', 'AM-$', 'ABC-GTY', 'HUYT-ABC', 'MONET Data-ABC']
['10000-1', '1-0,30', '3500-1', '1000-1', '1-1']
或者更酷的列表理解(结果相同):

输出:

ABC - DEF
AM - $
ABC - GTY
HUYT - ABC
MONET Data - ABC
10000 - 1
1 - 0 , 30
3500 - 1
1000 - 1
1 - 1

给我们看看你的代码?看起来您需要正则表达式。
'1 MONET Data=1 ABC'
是否会导致
'MONET Data ABC'
而不是
'MONETData-ABC'
获取字符串对?@seanfrancis.balais:MONET和数据之间应该有一个空格。您的代码在哪里?这个问题充斥着令人讨厌的egde案例,看到你的尝试会让你更容易得到帮助。