【问题标题】:Regex for AlphaNumeric words with special characters [closed]带有特殊字符的 AlphaNumeric 单词的正则表达式 [关闭]
【发布时间】:2021-04-26 12:54:35
【问题描述】:

我正在尝试制作正则表达式来捕获带有特殊字符的字母数字单词。 搜索将在最多 4 - 5 个单词的小字符串上完成,并且应该提取一个单词。 目标字符串可以在字符串中的任何位置,但会用空格分隔。

例如:

"Bill No: THRD/20-21/110"
"CRN No: GSTASP/20-21/066"
"Identifier value: PCPL-2021-000152"

需要获取这些值

THRD/20-21/110
GSTASP/20-21/066
PCPL-2021-000152

特殊字符仅限于“/ -” .到目前为止我所有的方法都失败了

【问题讨论】:

  • 我的目标字符串总是在最后?
  • @dawg no 目标字符串可以在字符串中的任何位置,但始终以空格分隔。

标签: python regex parsing


【解决方案1】:

您可以使用前瞻来限定下一个非空格子字符串包含/-

(?<=[ \t])(?=[^ \t]*[/-])([0-9a-zA-Z/-]+)

Demo

这仅适用于[ \t] 后面的子字符串,从字面上理解您的语句目标字符串可以在字符串中的任何位置,但始终用空格分隔。


如果您想在字符串的开头潜在地捕获,请删除后向:

(?=[^ \t]*[/-])([0-9a-zA-Z/-]+)

Demo 2

这将捕获具有该已定义字符集且其中至少包含一个[/-] 的任何子字符串(以使用[ \t] 定界符作为锚点的效率为代价...)

注意:如果您在字符类中使用- 作为文字字符,则需要对其进行转义或在类的末尾。否则,- 在字符类中定义一个范围。这是一个鬼鬼祟祟的错误,许多人使用正则表达式试图捕获文字 -

【讨论】:

  • 此解决方案运行良好。但是,它也与我的问题的字符串中的 Invoice/Note 类似。请注意,我的目标字符串将始终是字母数字,即两者的组合。我可以用简单的 python 字符串方法解决这个问题。如果您对此也有一个优雅的解决方案,那将不胜感激。谢谢。
  • 添加第二个前瞻,以证明其中有一个数字:(?=[^ \t]*[/-])(?=[^ \t]*[0-9])([0-9a-zA-Z/-]+)Demo
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多