繁体   English   中英

使用正则表达式拆分此字符串-python

Split this string using regular expression - python

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

Input string
---------------
South Africa 109/0 
Australia 100
Sri Lanka 111
Sri Lanka 331/4

Expected Output
---------------
['South Africa', '109', '0']
['Australia', '100']
['Sri Lanka', '111']
['Sri Lanka', '331', '4']

我尝试了几种正则表达式,但无法弄清楚编写正确的正则表达式。 在这种情况下,空格分隔符对我没有帮助,因为国家名称可能带有空格,也可能没有空格(南非,印度)。 提前致谢

5 个回复

我们可以使用正则表达式:

r'(\D+)\s(\d+)(?:/(\d+))?'

(“很多非数字,后跟一个空格,然后是很多数字,然后可选地,后面跟着一个斜杠,然后是很多数字。”)

这将返回,例如

>>> [re.match(r'(\D+)\s(\d+)(?:/(\d+))?', x).groups() 
...  for x in ['South Africa 109/0', 
...            'Australia 100',
...            'Sri Lanka 111',
...            'Sri Lanka 331/4']]
[('South Africa', '109', '0'), 
 ('Australia', '100', None), 
 ('Sri Lanka', '111', None), 
 ('Sri Lanka', '331', '4')]

注意None ,您可能需要手动将其过滤掉。

尝试:

import re
re.split(r"(?<=[a-zA-Z])\s+(?=\d)|(?=\d)\s+(?=[a-zA-Z])|/", "South Africa 109/0")
re.compile("^([\w\s]+)\s(\d+)\/?(\d+)?")

给您三个小组。 我们可以分解它

  • 行( ^ )开头的一组只有字母和空格([\\w\\s]+)
  • 空间
  • 一组数字,至少一个(\\d+)
  • 一个/
  • 一组数字(可能是None

这是您需要的正则表达式:

for match in re.finditer(r"(?m)^(?P<Country>.*?)\s*(?P<Number1>\d+)\s*?/?\s*?(?P<Number2>\d*?)\s*?$", inputText):
    country = match.group("Country")
    number1 = match.group("Number1")
    number2 = match.group("Number2")

您可以在此处查看结果。

这是该模式的说明:

# ^(?P<Country>.*?)\s*(?P<Number1>\d+)\s*?/?\s*?(?P<Number2>\d*?)\s*?$
# 
# Options: ^ and $ match at line breaks
# 
# Assert position at the beginning of a line (at beginning of the string or after a line break character) «^»
# Match the regular expression below and capture its match into backreference with name “Country” «(?P<Country>.*?)»
#    Match any single character that is not a line break character «.*?»
#       Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?»
# Match a single character that is a “whitespace character” (spaces, tabs, and line breaks) «\s*»
#    Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
# Match the regular expression below and capture its match into backreference with name “Number1” «(?P<Number1>\d+)»
#    Match a single digit 0..9 «\d+»
#       Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
# Match a single character that is a “whitespace character” (spaces, tabs, and line breaks) «\s*?»
#    Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?»
# Match the character “/” literally «/?»
#    Between zero and one times, as many times as possible, giving back as needed (greedy) «?»
# Match a single character that is a “whitespace character” (spaces, tabs, and line breaks) «\s*?»
#    Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?»
# Match the regular expression below and capture its match into backreference with name “Number2” «(?P<Number2>\d*?)»
#    Match a single digit 0..9 «\d*?»
#       Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?»
# Match a single character that is a “whitespace character” (spaces, tabs, and line breaks) «\s*?»
#    Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?»
# Assert position at the end of a line (at the end of the string or before a line break character) «$»

您已经用正则表达式得到了答案,但是我建议您也考虑可用的内置str方法(无论如何针对此用例):

s = 'South Africa 109/0'
country, numbers = s.rsplit(' ', 1)
# ('South Africa', '109/0')
new_list = [country] + numbers.split('/')
# ['South Africa', '109', '0'] 
1 在python中使用正则表达式拆分字符串

我有这样的弦 我想提取销售的开始和结束。 一种非常简单的方法是进行多次编辑,但是我想使用正则表达式。 结果我想得到 使用正则表达式可以做到这一点吗? ...

4 Python正则表达式split()字符串

我对python中的正则表达式很新。 我有以下字符串,并希望将它们分为五个类别。 我只是使用split()但它会根据空格分开。 如何编写正则表达式使其像这样拆分: 有人可以帮忙吗? 谢谢! ...

5 使用正则表达式分割字符串

我有一个字符串,需要正确分开: 我只需要获取view , frame , size和height 。 我需要使用正则表达式来做到这一点。 到目前为止,我已经尝试了许多变体,但没有一个与我想要的变体接近。 现在我的代码如下所示: 而且根本不起作用: 我是Java语言的 ...

6 使用正则表达式分割字符串

我有以下一组字符串: *H。 NGUYEN1,J.SATZ2,3,4,5,R.TURK2,3,4,5,K.CAMPBELL2,3,4,5,S.MOORE1 1病理学,2Mol。 生理学。 和生物物理学,3Neurol。,4Innl。 大学医学 爱荷华州爱荷华州爱荷华州; ...

2012-10-05 17:30:53 3 163   c#/ regex
9 在匹配的正则表达式(python)的部分上拆分字符串

假设我有一个字符串'ad&gt;ad&gt;ad&gt;&gt;ad' ,我想在'&gt;' (而不是'&gt;&gt;'字符)上拆分。 刚刚拿起正则表达式并想知道是否有一种方法(特殊字符)可以在匹配表达式的特定部分上进行拆分,而不是在整个匹配表达式上拆分,例如正则表达式可能是: re.s ...

10 Python用正则表达式拆分以分割字符串

我需要在Python中恢复2个正则表达式的结果:搜索的内容以及其他所有内容。 例如,在: 我想找到引号中的内容,而不是: 到目前为止,我有: 在我看来,这似乎效率极低,而且不是Python风格的。 有一个更好的方法吗? (很抱歉在StackOverflow上使用 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM