【问题标题】:Exact keyword match in string字符串中的精确关键字匹配
【发布时间】:2018-11-30 20:47:22
【问题描述】:

我知道这个问题已经在堆栈溢出中被问了近百次,但是在进行了大量搜索但没有找到我的答案之后,我问了这个问题。

我希望从类似下面的字符串中搜索确切的单词。

'svm_midrangedb_nonprod:svm_midrangedb_nonprod_root'
'svm_midrangedb_prod:svm_midrangedb_prod_root'

我只想搜索'prod',但在输出中同时获得'prod''nonprod'

这是我正在使用的代码:

re.search(r"\wprod\w", in_volumes.json()[i]['name'].split(":")[2].lower())

【问题讨论】:

  • 你想要的输出是什么?对于每个字符串,您想要['prod','prod'] 还是只需要['prod']
  • 只有产品而不是非产品
  • 我要问的是你是否想要'nonprod' 字的'prod' 部分?如果没有,那么您需要使用lookbehinds。
  • “Python 正则表达式匹配整个单词”在这个“is”中以空格开头和结尾,但在我的情况下没有空格。

标签: python string search


【解决方案1】:

你必须制定规则不匹配nonprod,但匹配prod

例如,也许您可​​以这样做,如果prod 前面有n,您可以像这样排除它:[^n]prod\w

或者,也许某些数据在 prod 前面有 n,而您想保留它。然后,如果prod 前面有non,则要排除:\w*(?<!non)prod\w*

这实际上取决于您的其余数据,看看您可以制定/应用什么样的规则来获得您想要的数据。

【讨论】:

  • 所以你的意思是对于每种可能的字符串类型,我必须在所需关键字之前或之后搜索可能的组合。惊讶地发现没有排序解决方案,也没有人遇到过这个问题。
  • @user3114051 是的,因为您正在寻找一个字符串prod 而不是一个单词prod,它通常有空格。你还想匹配intelprod 这样的字符串,对吗?那么它怎么知道匹配intelprod而不匹配nonprod
  • 是的,同意。 \w*(?
【解决方案2】:

这很正常,因为你的正则表达式告诉你想要一个包含"prod" 的字符串,为了很容易地解决这个问题,你可以做同样的事情,但喜欢跟随 re.search(r"\w_prod\w", in_volumes.json()[i]['name'].split(":")[2].lower()) 我只是在您的目标字符串中添加一个 _ 字符

【讨论】:

  • "_" 可以工作,但在其他一些行中,它就像 svm_sqldb_prod:gso_sql_sdb1_c2_intelprodsql02_nc2pwsql0350_data_vol01 和 svm_sqldb_prod:gso_sql_sdb1_c2_intelnonprodsql02_nc2pwsql0350_data_vol01
  • @user3114051 您可以将此正则表达式用于该 re.search(r"\w(?
猜你喜欢
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 2022-11-26
相关资源
最近更新 更多