python正则表达式匹配字符串

时间:2012-10-16 06:01:50

标签: python regex

我想解析一个字符串,例如:

package: name='jp.tjkapp.droid1lwp' versionCode='2' versionName='1.1'
uses-permission:'android.permission.WRITE_APN_SETTINGS'
uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED'
uses-permission:'android.permission.ACCESS_NETWORK_STATE'

我想得到:

string1: jp.tjkapp.droidllwp`

string2: 1.1

因为有多个uses-permission,我希望获得权限作为列表,包含: WRITE_APN_SETTINGSRECEIVE_BOOT_COMPLETEDACCESS_NETWORK_STATE

你能帮我写一下python正则表达式来获取我想要的字符串吗? 感谢。

3 个答案:

答案 0 :(得分:1)

假设您提供的代码块是一个长字符串,此处存储在名为input_string的变量中:

name = re.search(r"(?<=name\=\')[\w\.]+?(?=\')", input_string).group(0)
versionName = re.search(r"(?<=versionName\=\')\d+?\.\d+?(?=\')", input_string).group(0)
permissions = re.findall(r'(?<=android\.permission\.)[A-Z_]+(?=\')', input_string)

说明:

名称

  • (?<=name\=\'):检查主字符串的提前,以便仅返回前面带有name='的字符串。 \=前面的'用于逃避它们,以便正则表达式知道我们正在谈论=字符串而不是正则表达式命令。当我们得到结果时,name=' 也会被返回,我们只知道我们得到的结果都是前面的。
  • [\w\.]+?:这是我们正在搜索的主要字符串。 \w表示任何字母数字字符和下划线。 \.是一个转义期,因此正则表达式知道我们的意思是.而不是未转义的句号代表的正则表达式命令。将它们放在[]中意味着我们对括号中的任何内容都没有问题,所以我们说我们会接受任何字母数字字符_.+后缀表示至少一个前一个,意味着至少有一个(但可能更多)[\w\.]。最后,?表示不贪婪 - 我们告诉正则表达式获得符合这些规范的最小可能组,因为+可以继续与[\w\.]匹配的任意数量的无限次重复。
  • (?=\'):检查主要字符串后面的 ,以便仅返回'后面的字符串。 \也是一个转义,因为否则正则表达式或Python的字符串执行可能会误解'。最终' 与我们的结果一起返回,我们只知道在原始字符串中,它跟随我们最终得到的任何结果。

答案 1 :(得分:0)

您可以通过逐行读取文件内容而无需正则表达式来执行此操作。

>>> def split_string(s):
...     if s.startswith('package'):
...             return [i.split('=')[1] for i in s.split() if "=" in i]
...     elif s.startswith('uses-permission'):
...             return s.split('.')[-1]
... 
>>> split_string("package: name='jp.tjkapp.droid1lwp' versionCode='2' versionName='1.1'")
["'jp.tjkapp.droid1lwp'", "'2'", "'1.1'"]
>>> split_string("uses-permission:'android.permission.WRITE_APN_SETTINGS'")
"WRITE_APN_SETTINGS'"
>>> split_string("uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED'")
"RECEIVE_BOOT_COMPLETED'"
>>> split_string("uses-permission:'android.permission.ACCESS_NETWORK_STATE'")
"ACCESS_NETWORK_STATE'"
>>> 

答案 2 :(得分:0)

这是一个示例代码

#!/usr/bin/env python
inputFile = open("test.txt", "r").readlines()
for line in inputFile:
    if line.startswith("package"):
        words = line.split()
        string1 = words[1].split("=")[1].replace("'","")
        string2 = words[3].split("=")[1].replace("'","")

test.txt文件包含您之前提到的输入数据..