【问题标题】:RegEx to capture everything between two strings but avoid capturing commas正则表达式捕获两个字符串之间的所有内容,但避免捕获逗号
【发布时间】:2019-01-16 08:28:57
【问题描述】:

您好 StackOverflow 社区 请查看以下打印内容:

正如您所见,我正在捕获 <title></title> 括号之间的所有内容,但我想避免捕获文本中可能存在的任何逗号。

目前我得到:

Kincrome K1500G - Tool Workshop Contour 472 Piece 15 Drawer 1/4", 3/8" & 1/2" Drive Monster Green

我想得到什么:

Kincrome K1500G - Tool Workshop Contour 472 Piece 15 Drawer 1/4" 3/8" & 1/2" Drive Monster Green

我需要一个为我执行此操作的单行正则表达式命令。有任何想法吗?

这是我使用的正则表达式命令:

(?<=<title\>)(.*?)(?=\s*\<)

示例文本是:

<title>Kincrome K1500G - Tool Workshop Contour 472 Piece 15 Drawer 1/4", 3/8" &amp; 1/2" Drive Monster Green</title>

我正在使用 Kantu 浏览器自动化来提取一些网页的标题。请记住,我正在抓取整个网页的 HTML。

如果无法做到这一点,那么匹配到第一个逗号然后返回,例如返回这个:

Kincrome K1500G - Tool Workshop Contour 472 Piece 15 Drawer 1/4"

感谢您的宝贵时间。

【问题讨论】:

  • 您可以将您的输入作为文本而不是图像发布吗? (无法从图像中复制文本...)
  • 正则表达式做不到。它们要么匹配,要么不匹配,然后返回匹配的内容。如果您需要编辑结果,则需要使用其他处理它的东西来完成。
  • 正如@Barmar 所说,你不能用一行正则表达式来做到这一点。您可以匹配一个正则表达式,然后用另一个正则表达式替换以删除逗号,但您不能使用单个正则表达式来执行此操作,这是您的要求。
  • @Jackknife 如果您想通知某人发表评论,请在其姓名前加上@
  • 您可以使用/(?&lt;=&lt;title\&gt;)([^,]*?)/ 来匹配第一个逗号之前的所有内容,但这似乎不是您真正需要的。你只会得到Kincrome K1500G - Tool Workshop Contour 472 Piece 15 Drawer 1/4"

标签: regex html-parsing kantu


【解决方案1】:

正如 cmets 中提到的,正则表达式不能改变匹配的文本,它只是匹配或不匹配。

如果您愿意在第一个逗号处停止匹配,而不是在删除逗号的情况下包括所有其余部分,则可以使用:

(?<=<title\>)(.*?)(?=(,|\s*<\/title>))

https://regex101.com/r/PPb1ba/1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 2018-12-11
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    相关资源
    最近更新 更多