Regex 正则表达式-在第一次遇到冒号(:)之前一直读取,并忽略行的其余部分和开头的数字部分
这是电话线Regex 正则表达式-在第一次遇到冒号(:)之前一直读取,并忽略行的其余部分和开头的数字部分,regex,Regex,这是电话线 18. Deutsche Post Brand Value: $3,749 million Headquarter City: Bonn Category: Logistics Year Formed: 1947 期望的结果是:德意志邮政品牌价值 有了+?(?=:),我得到了18分。德意志邮政品牌价值 但我不想要18岁。在它和行的其余部分也应该被忽略 有什么建议吗?不用正则表达式,只需在已知字符上拆分字符串即可 在这种情况下,在所需块之后的第一个:,然后在18之后的第一个空格处重复
18. Deutsche Post Brand Value: $3,749 million Headquarter City: Bonn Category: Logistics Year Formed: 1947
期望的结果是:德意志邮政品牌价值
有了+?(?=:)
,我得到了18分。德意志邮政品牌价值
但我不想要18岁。在它和行的其余部分也应该被忽略
有什么建议吗?不用正则表达式,只需在已知字符上拆分字符串即可 在这种情况下,在所需块之后的第一个
:
,然后在18之后的第一个空格处重复一次。
在Python中,这可能看起来像
>>test_string=“18.德意志邮政品牌价值:37.49亿美元总部城市:波恩类别:物流形成年份:1947”
>>>测试字符串。拆分(“:”)#显示拆分
['18.德意志邮政品牌价值','37.49亿美元总部城市','波恩类别','物流年成立','1947']
>>>
>>>测试字符串。拆分(':')[0]。拆分('',1)[1]
“德意志邮政品牌价值”
如果必须使用正则表达式,那么可以使用捕获组仅匹配Python中的某个块示例
>>重新导入
>>>re.match(r“\d++.\s*([^::]+)”,test\u string.groups()
(‘德意志邮政品牌价值’,)
这是通过首先匹配\d+
N个数字\。
literal period\s*
任意数量的空白字符来实现的。。然后,对于具有[^::]+
的捕获组,将所有值匹配到下一个:
不同的正则表达式引擎将以某种方式引用此组(通常是\1
),或者可以直接请求它(.groups()
或.group1
,对于Python)
相关xkcd:
如果支持,请使用:
^\d+\.\s*\K[^:]+
(?<=^\d+\.\s+)[^:]+
^\d+\.\s*\K[^:]+
(?我曾经计算出\d*\.*(.*):
并将选项设置为Ungreedy/U
您必须从组1中选择想要的值
\d*
表示任意数量的数字
\。
是一个句点
是空格
(*)
是否包含最多个字符
:
冒号
--------------------------------------------------------------------------------
(?<= look behind to see if there is:
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
\s+ whitespace (\n, \r, \t, \f, and " ") (1
or more times (matching the most amount
possible))
--------------------------------------------------------------------------------
) end of look-behind
--------------------------------------------------------------------------------
[^:]+ any character except: ':' (1 or more times
(matching the most amount possible))