Python:从字符串中剥离字符,包括\ r \ n

时间:2012-03-27 19:13:35

标签: python string parsing

我有一个非常具体的挑战。我正在解析命令行字符串,除了特定的数字模式之外,我需要除去所有内容。例如:

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

我想得到这个数字20!我该怎么做呢?请注意,有时候这个数字可能是'abc-256\r\n0db'这样的单个数字。字符串不一定包含'\r\n'

我尝试了rstriplstripstrip[:]以及其他一些事情但没有成功。

3 个答案:

答案 0 :(得分:3)

如果您寻找的数字始终位于字符串的末尾,则可以使用此类正则表达式获取它:([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有一个正则表达式模块re,它有一个名为search的函数,它试图在给定的字符串中查找给定的正则表达式匹配。

基本上,这就是([0-9]+)[^0-9]*$的含义:

  • [0-9] 0到9之间的任何数字
  • [0-9]+从0到9
  • 中出现1个或多个任何数字
  • [^0-9]任何字符,但从0到9
  • [^0-9]* 0个或更多字符的序列,其中没有0到9之间的数字
  • $字符串结尾
  • (...)捕获群组,我们正在努力寻找的东西
  • ([0-9]+)[^0-9]*$一个包含1个或多个数字的序列,后跟0个或更多个非数字,后跟字符串的结尾

函数re.search有两个参数:一个正则表达式和一个用于搜索该正则表达式的字符串。它返回MatchObject类型的对象。基本上group(1)表示"给我第一个被捕获的组" ((...)中的那个)。

答案 1 :(得分:1)

如果您的表达式始终以“db”结尾,请尝试:

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

答案 2 :(得分:1)

你可以试试这个:

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