python - 如何从给定的字符串中提取字符和数值?

标签 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

数字对:

10000-1
1-0.30
3500-1
1000-1
1-1

我尝试使用 .lstrip('...')rstrip("..."),但它没有给我预期的结果.

最佳答案

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

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']

或更酷的列表理解(结果相同):

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

关于python - 如何从给定的字符串中提取字符和数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48251030/

相关文章:

python - 如何使用 cv2.kmeans 中的标签作为列表的索引?

python - 删除列表中其他字符串的子字符串而不更改列表的原始顺序?

python 3.X : How to insert new row in excel using Xlrd3 library

Java 程序在 "for"循环后卡住

javascript - 替换 HTML 字符串和避免标记(正则表达式)

string - 序言 : Remove extra spaces in a stream of characters

java - 在Java中将字符串数组转换为字符串

python - 更改 Django 中特定 CharField 的呈现

python - 如何在 Python 中使用多个键解析和排序 JSON

java - 在java中对二维数组进行排序(对所有字母进行排序)