【问题标题】:Regex to segregate list of strings and regexs正则表达式来分隔字符串列表和正则表达式
【发布时间】:2015-07-19 04:15:35
【问题描述】:

我有一个包含字符串和正则表达式的 python 输入列表。

str_regex = ['normal_string_1', ''^(?![_\-])[A-Za-z0-9\-_]+$', 'normal_string_2'] 

我需要将此列表分离为字符串列表和正则表达式列表。 总而言之,以下是输入和所需的输出。

输入:

['normal_string_1', ''^(?![_\-])[A-Za-z0-9\-_]+$', 'normal_string_2']

输出:

['normal_string_1', 'normal_string_2'], ['^(?![_\-])[A-Za-z0-9\-_]+$']

我打算形成一个正则表达式来做到这一点。诸如“应仅包含 [A-Z][a-z]”之类的内容。这是最好的方法吗?

【问题讨论】:

  • 请发布一些示例字符串,预期输出,尝试。
  • 自身内部的正则表达式是一个有效的字符串。请提供一些示例(输入、期望的输出,您可能有任何例外)。
  • (say, str_regex) 不是列表而是元组
  • 例子会有很大帮助
  • 嗨 - 我已经编辑了你的问题,试图让它更容易理解和更好地格式化。但是,您需要向我们提供关于什么是“普通字符串”的规则。您暗示它可能是仅包含 [a-zA-Z] 的字符串 - 这是您的规范吗?这意味着常规字符串不能包含数字、空格或下划线。在我们提供帮助之前,您需要定义普通字符串可以包含的内容以及它与正则表达式的区别。除非你有一个非常严格的规范,否则这可能是不可能的——因为你的“普通字符串”也可能是有效的正则表达式......

标签: python regex regex-negation


【解决方案1】:

如果我正确理解您的问题,您希望将字符串与不同正则表达式列表一起传递给函数,返回匹配的正则表达式。这应该可以解决问题:

import re
def contains(string, regexes):
  lst = []
  for regex in regexes:
    match = re.findall(regex, string)
    if len(match) > 0 and len(match[0]) == len(string):
      return string + " contains only \"" + regex + "\""
  return "No matching regex was found"

if __name__ == "__main__":
  regexes = [
    "[a-z]+",     # lower case
    "[A-Z]+",     # upper case
    "[a-zA-Z]+",  # mixed case
    "\d+",        # digits
    "[a-z\d]+",   # digits and lower case
    "[A-Z\d]+",   # digits and upper case
    "[a-zA-Z\d]+" # digits and mixed case
  ]
  print contains("SHOULD" , regexes)
  print contains("should" , regexes)
  print contains("Should" , regexes)
  print contains("123"    , regexes)
  print contains("123as"  , regexes)
  print contains("123AS"  , regexes)
  print contains("123aS"  , regexes)

以上印刷品

SHOULD contains only "[A-Z]+"
should contains only "[a-z]+"
Should contains only "[a-zA-Z]+"
123 contains only "\d+"
123as contains only "[a-z\d]+"
123AS contains only "[A-Z\d]+"
123aS contains only "[a-zA-Z\d]+"

【讨论】:

  • 这不是我想要的。问题没有正确形成可能是我的错。编辑了问题。
猜你喜欢
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 2022-10-24
  • 2021-03-06
相关资源
最近更新 更多