【问题标题】:Grap all text after given word [duplicate]抓住给定单词后的所有文本[重复]
【发布时间】:2020-07-16 08:16:35
【问题描述】:

我想抓取给定关键字后的所有文本

Slot ID = 10, Machine type = 2000, Comments, FileName, Image Orientation = DecToSource, Background = 0, Center_X = 0, Center_Y = 0, OI = -1, AT angle = 0, Location X = 15.878, Location Y = 21.26
Slot ID A, Machine type = 2000, Comments, FileName, Image Orientation = DecToSource, Background = 0, Center_X = 0, Center_Y = 0, OI = 0.9, AT angle = 0, Location X

这个例子。如果我给出“Slot ID”,我的期望是抓住

"10,机器类型 = 2000,评论,文件名,图像方向 = DecTo## 标题 ##Source,背景 = 0,Center_X = 0,Center_Y = 0,OI = -1, AT 角 = 0,位置 X = 15.878,位置 Y = 21.26"

"A, 机器类型 = 2000,评论,文件名,图像方向 = DecToSource,背景 = 0,Center_X = 0,Center_Y = 0,OI = -1,AT 角度 = 0,位置X = 15.878,位置 Y = 21.26"

我尝试了下面的表达式,但这总是无法抓住“Slot ID =”的情况。

(?<=((Slot ID )|(Slot ID = ))).

哪一点错了?

【问题讨论】:

  • 用什么语言?你已经标记了 Python 和 C#。
  • [python]、[c#] 和 [nsregularexpression] 不能混合使用。请仅使用相关标签。
  • 适用于几乎所有正则表达式风格的最安全选项是^Slot ID (?:= )?(.+)$,其中预期匹配将在第一个捕获组中。演示:regex101.com/r/cCZGvl/1

标签: python c# regex


【解决方案1】:

可以用string.split方法吗?

string text = "Slot ID = 10, Machine type = 2000, Comments, FileName, Image Orientation = DecToSource, Background = 0, Center_X = 0, Center_Y = 0, OI = -1, AT angle = 0, Location X = 15.878, Location Y = 21.26";

string[] array =  text.Split("Slot ID = ");

【讨论】:

    【解决方案2】:

    这个正则表达式应该可以解决问题:

    ^(?:Slot\sID\s(?:=\s)?\s*)(.*)$
    

    第一个是非捕获组,然后捕获逗号(和可选空格)之后的所有其他内容,直到结尾 $。

    在开始时使用^ 要求匹配组是第一个,如果不是您的情况,请尝试将第一个^ 与.* 交换。

    (更多信息:https://regexr.com/58hnr)

    【讨论】:

    • 为什么是[^,]*,\s* 部分? OP 似乎想在比赛中包含第一个逗号之前的任何内容。另外(挑剔),非捕获组是不必要的,第一个捕获组应该是非捕获的。
    • 糟糕,我读的太快了。感谢您指出这一点,正如您提到的,我修复了第一部分。对于第二部分,您的意思是 (=\s) 正在捕获?现在它也无法捕获。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 2020-01-16
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 2020-09-21
    相关资源
    最近更新 更多