Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式-在第一次遇到冒号(:)之前一直读取,并忽略行的其余部分和开头的数字部分_Regex - Fatal编程技术网

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))