簡體   English   中英

帶有范圍結構的python中的正則表達式

[英]regular expression in python with range structure

我需要在具有以下格式混合結構的字符串中獲取較低和較高值:

Rules:
1. If lower and upper range is available then they are separated by '-'. 
2. Sometimes the range is written as <=xx.y

2a. If 'less than' is anywhere in the text then search for the number. pl. see Example below:

3. If at all age range appears then it appears always before the range, separated from range by a ':'
4. the unit is optional

示例數據

10.0 - 35.0 MCG/ML
<=6.0 MG/24 H
51-60 YEARS: 37-129
15 - 60
0.5-9.9 %
LESS THAN 30 PG/ML
LESS THAN OR EQUAL 35 UG/DL
LESS THAN OR EQUAL TO 35
NEGATIVE: LESS THAN 20
REF RANGE LESS THAN 2.0
1.3 OR LESS PMOL/L
LAR: LESS THAN 1 NG/M

從上面的示例中,我的輸出將是:

10.0,35.0, MCG/ML
0, 6.0, MG/24 H
37, 129,
15,60
0.5, 9.9, %

編輯:

the string is in 'refVal'
re.search(r'([0-9]*\.?[0-9]*)\s*-\s*([0-9]*\.?[0-9]*)', refVal)
re.search(r'(<=|<|<\s*=|<\sOR\s=)\s*([0-9.]+)', refVal)

我在上面的例子中添加了一些例子(特別是少於)。 我想編寫Regex,如果文本中有'Less Than',則獲取值。

以下給了我不想要的'無'。

>>> re.search(r'([0-9.]+) OR LESS|LESS THAN ([0-9.]+)', '5.4 OR LESS').groups()
('5.4', None)

IMO你不會單獨使用正則表達式獲得可靠的解決方案。 如果是我,我會將其分解為多個條件和正則表達式。 話雖如此,對於屎和笑容,我確實提出了這個......它確實與上述所有內容相匹配,但它非常難看; 對於初學者,根據格式將數據捕獲到不同的組...

(?(?=.*:).*:\s*([0-9.]+)\s*-\s*([0-9.]+)|(?(?=.*\<=)(.*?)<=\s*([0-9.]+)\s*(.*)|([0-9.]+)\s*-\s*([0-9.]+)\s*(.*)))

暫無
暫無

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

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