簡體   English   中英

如何從給定的字符串中提取字符和數值?

[英]How to extract characters and numeric values from a given string?

我有以下字符串:

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

我想找到一種靈活的方法來從=左側和右側提取數值和字符串值。 我不知道所有可能的字符串值。 因此我無法預先定義它們。 我唯一知道的是左右兩邊除以=

目標是為上面給出的示例得到這個結果:

String-pairs

ABC-DEF
AM-$
ABC-GTY
HUYT-ABC
MONET Data-ABC

Numeric-pairs

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]

作為正則表達式的替代方法,您可以做的是遍歷每個字符串並提取相關字符。 它可能看起來像下面的內容。

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


def getThePat(pat):
    for i in str:
        i = i.split("=")
        x = re.findall(pat, i[0])
        y = re.findall(pat, i[1])
        print(" ".join(x), "-", " ".join(y))


pat1 = "\$+|[a-z]+|[A-Z][a-z]+|[A-Z]+"
pat2 = "\d+|\,+"
getThePat(pat1)
getThePat(pat2)

輸出:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM