python - 为什么正则表达式在 Python 2.7 中匹配一个额外的空格?

标签 python regex python-2.7

使用 Python 2.7。在一个长字符串中,我想匹配以 { 开头和结尾的内容} .特别是,我对 { 中的两个部分感兴趣} .第一部分是 [1J, 2J, ..., 10J] 中的任何内容或 [1S, 2S, ..., 10S] , 并用 () 包裹并由 , 分隔.我感兴趣的第二部分是 { 中的剩余文本} .

在下面的示例中,我想查找 (2J,3S)Hello World在第一个{ } , 并找到 (1J,2S,3J)Hello Python在第二个{ } .

我的问题是,在我下面的代码中,J 之间有一个额外的空格和 ,2J ,3S , 和 J 之间的另一个额外空间和 ,1J ,2S,3J .想知道空间从何而来以及如何解决?

import re

judgeItemYesRegNew = r'(\((?:(?:10|[1-9])J|S(?:,|\)))+)(.*?)\s?}'
string = "Some content  {(2J,3S) Hello World } Some content {(1J,2S,3J) Hello Python }"
result = re.findall(judgeItemYesRegNew, string)
for (num, content) in result:
    print num, content

输出是,

(2J ,3S) Hello World
(1J ,2S,3J) Hello Python

最佳答案

print num, content 用空格分隔两个打印值。如果您不想打印该空格,请连接两个字符串:

print num + content

请注意,num 仅由 '(2J'(1J' 组成,其余部分包含在 content 中 (',3S) Hello World'',2S,3J) Hello Python'

那是因为你用 | 将组分成了 JS 部分; 前后 同一个括号内的所有内容现在都是这两个选项的一部分,而不仅仅是这两个字母。您要么匹配 (?:10|[1-9])J,要么匹配 S(?:,|\)

使用[JS](一个字符类)代替替代分组:

(\((?:(?:10|[1-9])[JS](?:,|\)))+)

完整表达:

judgeItemYesRegNew = r'(\((?:(?:10|[1-9])[JS](?:,|\)))+)(.*?)\s?}'

这将导致 num = '(2J,3S)'content = 'Hello World';注意空格,您可能想在第二组的右括号后留空格:

judgeItemYesRegNew = r'(\((?:(?:10|[1-9])[JS](?:,|\)))+)\s*(.*?)\s?}'

参见 https://regex101.com/r/xH5xP9/1该模式的在线正则表达式演示。

Python 演示:

>>> import re
>>> judgeItemYesRegNew = r'(\((?:(?:10|[1-9])[JS](?:,|\)))+)\s*(.*?)\s?}'
>>> string = "Some content  {(2J,3S) Hello World } Some content {(1J,2S,3J) Hello Python }"
>>> result = re.findall(judgeItemYesRegNew, string)
>>> for (num, content) in result:
...     print (num, content)
...
('(2J,3S)', 'Hello World')
('(1J,2S,3J)', 'Hello Python')

关于python - 为什么正则表达式在 Python 2.7 中匹配一个额外的空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38969486/

相关文章:

python - 如何更改seaborn FacetGrid对象中的箱线图大小

ruby - 使用正则表达式数组过滤数组

python - 如何压缩整个目录的内容?

python-3.x - Python 2 到 Python 3 结构包问题

Python自动重启电脑

python - 猴子修补 Django 表单类?

java - Java正则表达式中的最大组数

python - 无法从给定格式中提取出生日期

python - 从字典列表中返回最大的字典和

python - Keras 图像数据增强