亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一次性為文本數據創建正則表達式?

一次性為文本數據創建正則表達式?

子衿沉夜 2023-01-04 11:00:41
這是我的文本格式,我想將正則表達式傳遞到此數據中。因為我創建了一個正則表達式,但它不起作用。(\S+)\s+(\d+.\d+)|(\S+)\s+(=\d+.\d+)它沒有給我預期的輸出:這個數據在一個TXT文件里,單詞start前有很多空格我附上了有關我如何閱讀 TXT 文件以及如何在我的代碼中使用此正則表達式的代碼請幫我      HUWAN DIAGNOSTICO CENTER   epoc BGEM  BLACk ASD      Patient ID:  ALEN KON     Date & Time: 22  May-45 7:49:73 Results:  Gases+   hUbo2     21.8.  ssol/t  vsdw   AE(k)    =3.0    asdsddf/as   Cat+      1.1   fasdl/  aoKwGlu       38Dac       < 0.30 DH         7.350 -  7.450 iKo2        35.0 —- 48.0  LE(dcf)     2.0-   3.0  Lp+          138  ~ 146   C1-           98 - 107    hjkkl/asL LKu           74 ~  100  Arsa        9.51 - 1.19  s$92       94.0  - 98.0   %     Sample type:  Unspecified  Hemodi lution: No   Height:  Not entered     Comments: Operator:  user預期輸出:字典(鍵:值列表)Keys      ValueshUbo2     21.8AE(k)    3.0Cat+      1.1Glu       38Dac       0.30DH         7.350   7.450iKo2        35.0  48.0LE(dcf)     2.0   3.0Lp+          138   146C1-           98  107LKu           74   100Arsa        9.51  1.19s$92       94.0   98.0# code for How i read my txt filefor i, line in enumerate(open(mytext_file)):    for match in re.finditer(pattern, line):        try:            abcd = float(match.group(2).strip())            print('%s: %s' % (match.group(1), abcd))        except Exception:            pass
查看完整描述

2 回答

?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

您可以使用可選的第三組而不使用交替|并檢查它是否存在

^[^\S\r\n]*(\S+)[^\d\r\n]+(\d+(?:\.\d+)?)[^\d\r\n]*(\d+(?:\.\d+)?)?

在部分

  • ^字符串的開始

  • [^\S\r\n]*匹配 0+ 次除換行符外的空白字符

  • (\S+)捕獲組 1,匹配 1+ 個非空白字符

  • [^\d\r\n]+匹配除換行符或數字以外的任何字符 1 次以上

  • (\d+(?:\.\d+)?)捕獲第 2 組,匹配帶有可選小數部分的數字

  • [^\d\r\n]*匹配 + 乘以除換行符或數字以外的任何字符

  • (\d+(?:\.\d+)?)?可選的捕獲組 3,匹配帶有可選小數部分的數字

正則表達式演示Python演示

例如

import re

regex = r"^[^\S\r\n]*(\S+)[^\d\r\n]+(\d+(?:\.\d+)?)[^\d\r\n]*(\d+(?:\.\d+)?)?"

dict = {}

test_str = ("   hUbo2     21.8.  ssol/t  vsdw \n"

            "   AE(k)    =3.0    asdsddf/as\n"

            "   Cat+      1.1   fasdl/  aoKw \n"

            "Glu       38\n"

            "Dac       < 0.30\n"

            " DH         7.350 -  7.450\n"

            " iKo2        35.0 —- 48.0\n"

            "  LE(dcf)     2.0-   3.0\n"

            "  Lp+          138  ~ 146\n"

            "   C1-           98 - 107    hjkkl/asL \n"

            " LKu           74 ~  100 \n"

            "  Arsa        9.51 - 1.19 \n"

            "  s$92       94.0  - 98.0   % ")


matches = re.finditer(regex, test_str, re.MULTILINE)


for matchNum, match in enumerate(matches, start=1):

    dict[match.group(1)] = match.group(2) + ( " " + match.group(3) if match.group(3) else "")


print(dict)

輸出


{'hUbo2': '21.8', 'AE(k)': '3.0', 'Cat+': '1.1', 'Glu': '38', 'Dac': '0.30', 'DH': '7.350 7.450', 'iKo2': '35.0 48.0', 'LE(dcf)': '2.0 3.0', 'Lp+': '138 146', 'C1-': '98 107', 'LKu': '74 100', 'Arsa': '9.51 1.19', 's$92': '94.0 98.0'}

使用提供的代碼的示例:


import re


pattern = r"^[^\S\r\n]*(\S+)[^\d\r\n]+(\d+(?:\.\d+)?)[^\d\r\n]*(\d+(?:\.\d+)?)?"

dict = {}


for i, line in enumerate(open(mytext_file)):

    for match in re.finditer(pattern, line):

        try:

            abcd = float(match.group(2).strip())

            dict[match.group(1)] = '{}{}'.format(abcd, (" " + match.group(3) if match.group(3) else ""))

        except Exception:

            pass


print(dict)


查看完整回答
反對 回復 2023-01-04
?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

這是一個小的 python 腳本(包括正則表達式),當您通過 stdin 傳輸數據時,它會轉換您的數據:


import fileinput

import re


for line in fileinput.input():

    line = re.sub(r'^\s*(\S+)\D+([\d.]*\d)\D*((?:[\d.]*\d)?)\D*$', r'\1  \2  \3', line.rstrip())

    print(line)

以下是您將如何使用它及其輸出:


cat data.txt | python regex.py 

hUbo2  21.8  

AE(k)  3.0  

Cat+  1.1  

Glu  38  

Dac  0.30  

DH  7.350  7.450

iKo2  35.0  48.0

LE(dcf)  2.0  3.0

Lp+  138  146

C1-  98  107

LKu  74  100

Arsa  9.51  1.19

s$92  94.0  98.0

(如果您使用的是 Windows,請使用type而不是cat 。)


查看完整回答
反對 回復 2023-01-04
  • 2 回答
  • 0 關注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號