【问题标题】:Regex different type of strings正则表达式不同类型的字符串
【发布时间】:2018-04-19 08:04:38
【问题描述】:

我有一个字符串,我需要从中获取一部分,但字符串可以不同。

这是一些字符串选项:

"{{concentration=1}} charname=Mirajane \"Mira\" Felgrove"

"{{concentration=1}} {{charname=Mirajane \"Mira\" Felgrove}}"

"charname=Mirajane \"Mira\" Felgrove {{concentration=1}}"

反正我只能得到以下部分吗?

Mirajane \"Mira\" Felgrove

谢谢。

编辑:我目前在 JS 中工作。 charname 可以是任何东西;字母、数字、空格、其他字符,它可以位于字符串中的不同位置,并且可以使用或不使用 {{}}。

【问题讨论】:

  • 有什么要求?什么工具或语言?你试过什么?
  • @revo 对不起,不要经常使用正则表达式(我应该真正研究一下)并认为语言没有区别。我现在在 JS 工作。 charname 可以是任何字母、数字、空格、其他字符,并且可以位于字符串中的不同位置,并且可以带有或不带有 {{}}。

标签: javascript regex


【解决方案1】:

您可以使用正则表达式(?<=charname=)[^\n{}]*[^"\n{}]

  • (?<=charname=) 确保 charname= 在你的比赛之前

  • [^\n{}]* 匹配除newline{} 之外的任何内容0 次或多次。

  • [^"\n{}] 确保最后一个字符不是"newline{}

Demo.

【讨论】:

  • 你怎么知道 OP 的结尾正则表达式支持lookbehinds?
  • 我没有。我只是发布一个解决方案。如果它不能解决 OP 的问题,他可以随意告诉我。
  • 当问题仅用正则表达式标记时,这意味着 OP 未能清除语言或工具或正则表达式风格。如果您花时间提供一个好的答案,如果您关心这段时间的花费,请事先要求澄清。您在 regex101 中选择的正则表达式风格 (JS) 也不支持 Lookbehinds。目前只有 Chrome 支持它,这意味着如果 OP 使用其他浏览器(如 Firefox)会看到错误。
  • 我喜欢这个解决方案,它确实对我不起作用,因为我使用的是 JS。我应该更清楚。
  • @RobinKuiper 在这种情况下使用charname=([^\n{}]*[^"\n{}]),并得到$1
【解决方案2】:

许多不同的正则表达式可以匹配这些字符串并给你预期的结果。也许您需要更准确地定义用例。

我看到的最简单的一种可能性如下:

charname=([A-Za-z\"]+\s+[A-Za-z\"]+\s+[A-Za-z\"]+)

它会查找乱码“charname=”,后跟 3 个字母和引号字符串,并捕获除“charname=”之外的所有内容。 不过这个解决方案不是很健壮。

【讨论】:

  • 感谢您的回答,但我目前在 JS 工作。 charname 可以是任何字母、数字、空格、其他字符,并且可以位于字符串中的不同位置,并且可以带有或不带有 {{}}。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 2016-02-09
相关资源
最近更新 更多