簡體   English   中英

Python:從包含\\ r \\ n的字符串中剝離字符

[英]Python: stripping charactors from string including \r\n

我有一個非常具體的挑戰。 我正在解析一個命令行字符串,需要擺脫除特定數字模式之外的所有內容。 例如:

str = 'abd-256PA\r\n20db'

我想得到那個數字20! 我該怎么做呢? 請記住,有時數字可能是一個數字,例如'abc-256\\r\\n0db' 並且該字符串不一定會在其中包含'\\r\\n'

我嘗試了rstriplstripstrip[:]和其他一些嘗試,但lstrip成功。

如果要查找的數字始終在字符串的末尾,則可以使用以下正則表達式來獲取它: ([0-9]+)[^0-9]*$

示例程序:

import re
print re.search(r'([0-9]+)[^0-9]*$','abd-256PA\r\n20db').group(1)

輸出示例:

20

測試程序:

import re

str = ['abd-256PA\r\n20db', 
       'abc-256\r\n0db', 
       'abc-256aa0db',
       'uio1289248282dasd1786ddass',
       '12',
       '2101a123aasdqwqwe']

for x in str:
    print '"%s" >> "%s"' %(x, re.search(r'([0-9]+)[^0-9]*$',x).group(1))

測試輸出:

"abd-256PA
20db" >> "20"
"abc-256
0db" >> "0"
"abc-256aa0db" >> "0"
"uio1289248282dasd1786ddass" >> "1786"
"12" >> "12"
"2101a123aasdqwqwe" >> "123"

根據要求說明:

Python有一個正則表達式模塊重新與函數調用搜索它試圖找到指定字符串在給定的正則表達式匹配。

基本上,這就是([0-9]+)[^0-9]*$意思:

  • [0-9] 0到9之間的任何數字
  • [0-9]+或多次出現,范圍從0到9
  • [^0-9]任意字符,但編號從0到9
  • [^0-9]*一個0或更多字符的序列,其中沒有0到9之間的數字
  • $字符串結尾
  • (...)捕獲小組,我們正在嘗試找到的東西
  • ([0-9]+)[^0-9]*$包含1個或多個數字的序列,后跟0個或多個非數字,然后是字符串的結尾

函數re.search具有兩個參數:正則表達式和在其中搜索該正則表達式的字符串。 然后返回MatchObject類型的對象。 基本上, group(1)意思是“給我第一個捕獲的組”( (...)那個)。

如果您的表達式始終以“ db”結尾,請嘗試:

import re
d = "abd-256PA\r\n20db"
s = re.search("\d{1,2}db",d)
print d[s.start():s.end()-2]

您可以嘗試以下方法:

str.replace('\n','').replace('\r','').replace('abc-256','').replace('abd-256','').replace('PA','').replace('db','')

它適用於您描述的兩種情況。它只是將所有無用的信息替換為空字符串。

更新:

如果您不知道字符串是什么,並且只知道想要的數字后面有后綴“ db”,則可以嘗試以下正則表達式:

import re
regex=re.compile("([0-9]+)db")
str="abd-256PA\r\n20db"
parsed_number = regex.findall(str)[0]
print parsed_number

暫無
暫無

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

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