如何使用Python Regex提取特定的字符串

jayko03

我一直在努力挑战极富挑战性的弦乐。
例如,

str1 = '95% for Pikachu, 92% for Sandshrew'
str2 = '70% for Paras & 100% Arcanine'
str3 = '99% Diglett, 40% Dugtrio'
str4 = '10% Squirtle, 100% for Alakazam'
str5 = '30% Metopod & 99% Dewgong'

字符串以%整数开头,可能有for或没有,然后以神奇宝贝的名字开头可能有comma(,)&符号,然后是新的%整数。最后是宠物小精灵的另一个名字(全部以大写字母开头),
我想提取两个宠物小精灵,例如result,

['Pikachu', 'Sandshrew']
['Paras', 'Arcanine']
['Diglett', 'Dugtrio']
['Squirtle', 'Alakazam']
['Metopod', 'Dewgong']

我可以使用in语法创建所有宠物小精灵的列表,但这不是最好的方法(以防他们添加更多宠物小精灵)。是否可以使用Regex提取?
提前致谢!
编辑
根据要求,我正在添加代码,

str_list = [str1, str2, str3, str4, str5]

for x in str_list:
    temp_list = []
    if 'for' in x:
        temp = x.split('% for', 1)[1].strip()
        temp_list.append(temp)
    else:
        temp = x.split(" ", 1)[1]
        temp_list.append(temp)
print(temp_list)

我知道这不是正则表达式。我尝试过的表达式是\d+提取整数以开始...但是不知道如何开始。
EDIT2
@b_c具有良好的边缘情况,因此,我将其添加到此处

edge_str = '100% for Pikachu, 29% Pika Pika Pikachu'

结果

['Pikachu', 'Pika Pika Pikachu']
公元前

希望我并没有为此过度设计,但是我想介绍稍微复杂一点的命名宠物小精灵的边缘案例,例如“ Mime。Mime”,“ Farfetch'd”和/或“Nidoran♂”(仅看看第151页)。

我使用的模式是(?:(?:\d+%(?: |for)+([A-Z](?:[\w\.♀♂']|(?: (?=[A-Z])))+))+)[, &]*,它似乎可以在我的测试中正常工作(这是regex101链接,用于分类)。

对于一般的摘要,我正在寻找:

  • 1+位数字,后跟%
  • 空格或单词“ for”至少一次
  • (开始捕获)首字母大写
  • 至少一个(结束捕获组):
    • 文字字符,句号,公/母符号或撇号
      • 注意:如果要捕获其他“怪异”的神奇宝贝字符,例如数字,冒号等,请将它们添加到此部分([\w\.♀♂']位)中。
    • 或一个空格,但前提是后面必须有一个大写字母
  • 逗号,空格或“&”号任意次

除非更改,否则Python的内置re模块不支持重复捕获组(我相信我做对了),因此我只是将re.findall它们成对使用并组织成对(我将输入中的几个名称替换为复杂的名称):

import re

str1 = '95% for Pikachu, 92% for Mr. Mime'
str2 = '70% for Paras & 100% Arcanine'
str3 = '99% Diglett, 40% Dugtrio'
str4 = "10% Squirtle, 100% for Farfetch'd"
str5 = '30% Metopod & 99% Nidoran♂'

pattern = r"(?:(?:\d+%(?: |for)+([A-Z](?:[\w\.♀♂']|(?: (?=[A-Z])))+))+)[, &]*"

# Find matches in each string, then unpack each list of
# matches into a flat list
all_matches = [match
               for s in [str1, str2, str3, str4, str5]
               for match in re.findall(pattern, s)]

# Pair up the matches
pairs = zip(all_matches[::2], all_matches[1::2])

for pair in pairs:
    print(pair)

然后打印出来:

('Pikachu', 'Mr. Mime')
('Paras', 'Arcanine')
('Diglett', 'Dugtrio')
('Squirtle', "Farfetch'd")
('Metopod', 'Nidoran♂')

另外,正如已经提到的,您确实在口袋妖怪名称中有一些错别字,但是不幸的是,正则表达式不是正确的解决方法:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用 regex.match 在 c# 中提取字符串的特定部分?

来自分类Dev

使用 RegExp 提取特定字符串

来自分类Dev

在R中使用REGEX将值中的特定字符串提取为新列?

来自分类Dev

使用Regex(PHP)从字符串中提取特定数据

来自分类Dev

在R中使用REGEX将值中的特定字符串提取为新列?

来自分类Dev

Java Regex:如何使用OR操作提取子字符串

来自分类Dev

如何使用grep通过Regex提取字符串?

来自分类Dev

Python-使用RegEx从字符串中提取模式

来自分类Dev

使用Regex和Python提取字符串

来自分类Dev

使用Python从Telnet输出中提取特定的字符串

来自分类Dev

如何从python中的字符串中提取特定的子字符串

来自分类Dev

如何使用一个衬里从字符串中提取特定子字符串

来自分类Dev

如何使用Python Regex精确匹配提取子字符串

来自分类Dev

python regex:从转义序列中提取字符串

来自分类Dev

如何从特定字符串到特定结尾的字符串中提取子字符串?

来自分类Dev

使用Regex从单行字符串中提取重复模式

来自分类Dev

使用Regex从查询字符串中提取值

来自分类Dev

使用ruby regex提取字符串

来自分类Dev

在Java中使用REGEX从字符串中提取令牌

来自分类Dev

使用 Regex.Matches 从字符串中提取数据

来自分类Dev

如何使用 RegEx 在字符串中选择特定范围

来自分类Dev

在Python中使用Regex获取特定的字符串

来自分类Dev

如何在SQL Server中提取特定的字符串?

来自分类Dev

如何从字符串中提取特定模式

来自分类Dev

如何在Linux中提取特定的字符串?

来自分类Dev

JS:如何找到特定的字符串,然后提取整数?

来自分类Dev

如何从特定字符串中提取时间?

来自分类Dev

如何从文件中提取特定字符串(Linux)

来自分类Dev

如何从HTML中提取文本(在特定字符串之后)

Related 相关文章

  1. 1

    如何使用 regex.match 在 c# 中提取字符串的特定部分?

  2. 2

    使用 RegExp 提取特定字符串

  3. 3

    在R中使用REGEX将值中的特定字符串提取为新列?

  4. 4

    使用Regex(PHP)从字符串中提取特定数据

  5. 5

    在R中使用REGEX将值中的特定字符串提取为新列?

  6. 6

    Java Regex:如何使用OR操作提取子字符串

  7. 7

    如何使用grep通过Regex提取字符串?

  8. 8

    Python-使用RegEx从字符串中提取模式

  9. 9

    使用Regex和Python提取字符串

  10. 10

    使用Python从Telnet输出中提取特定的字符串

  11. 11

    如何从python中的字符串中提取特定的子字符串

  12. 12

    如何使用一个衬里从字符串中提取特定子字符串

  13. 13

    如何使用Python Regex精确匹配提取子字符串

  14. 14

    python regex:从转义序列中提取字符串

  15. 15

    如何从特定字符串到特定结尾的字符串中提取子字符串?

  16. 16

    使用Regex从单行字符串中提取重复模式

  17. 17

    使用Regex从查询字符串中提取值

  18. 18

    使用ruby regex提取字符串

  19. 19

    在Java中使用REGEX从字符串中提取令牌

  20. 20

    使用 Regex.Matches 从字符串中提取数据

  21. 21

    如何使用 RegEx 在字符串中选择特定范围

  22. 22

    在Python中使用Regex获取特定的字符串

  23. 23

    如何在SQL Server中提取特定的字符串?

  24. 24

    如何从字符串中提取特定模式

  25. 25

    如何在Linux中提取特定的字符串?

  26. 26

    JS:如何找到特定的字符串,然后提取整数?

  27. 27

    如何从特定字符串中提取时间?

  28. 28

    如何从文件中提取特定字符串(Linux)

  29. 29

    如何从HTML中提取文本(在特定字符串之后)

热门标签

归档