Python正则表达式匹配字符串

2024-04-25 08:55:22 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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'

我想得到:

^{pr2}$

因为有多个使用权限,我想以列表形式获取权限,包含: WRITE_APN_SETTINGSRECEIVE_BOOT_COMPLETED和{}。在

你能帮我写python正则表达式来得到我想要的字符串吗? 谢谢。在


Tags: 字符串name权限packagesettingswriteandroidreceive
3条回答

您可以通过逐行读取文件内容而不使用regex来完成此操作。在

>>> 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'"
>>> 

假设您提供的代码块是一个长字符串,存储在一个名为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='开头的字符串。在='前面的\用于转义它们,这样regex就知道我们在讨论=字符串,而不是regex命令。name='isnot当我们得到结果时,我们只知道我们得到的结果前面都有它。在
  • [\w\.]+?:这是我们要搜索的主字符串。\w表示任何字母数字字符和下划线。\.是一个转义句点,因此regex知道我们的意思是.,而不是由未转义句点表示的regex命令。把这些放在[]中意味着我们可以接受任何我们卡在括号里的东西,所以我们说我们接受任何字母数字字符,_,或{}。+后话意味着前一个事物中的至少一个,意思是至少一个(但可能更多)的{}。最后,?意味着不要贪心我们告诉regex获得满足这些规范的尽可能小的组,因为+可以无限重复[\w\.]匹配的任何内容。在
  • (?=\'):检查主字符串后面的以便只返回后跟'的字符串。\也是一个转义,因为否则regex或Python的字符串执行可能会误解'。最后一个'不是与我们的结果一起返回的,我们只知道在原始字符串中,它跟在我们最终得到的任何结果之后。在

下面是一个示例代码

#!/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("'","")

在测试.txt文件包含您前面提到的输入数据。。在

相关问题 更多 >