Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Regex用于分隔字符串列表和Regex_Python_Regex_Regex Negation - Fatal编程技术网

Python Regex用于分隔字符串列表和Regex

Python Regex用于分隔字符串列表和Regex,python,regex,regex-negation,Python,Regex,Regex Negation,我有一个包含字符串和正则表达式的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', '

我有一个包含字符串和正则表达式的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]
”的内容。这是最好的方法吗?

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

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]+"

请发布一些示例字符串、预期输出、尝试。正则表达式本身就是有效字符串。请提供一些示例(输入、所需的输出,以及您可能遇到的任何例外)。
(比如str_regex)
不是一个列表,而是一个tupleexamples会很有帮助的。我编辑了您的问题,以使其更容易理解,格式也更好。但是,您需要给我们关于什么是“普通字符串”的规则。您提示可能是只包含[a-zA-Z]的字符串-这是您的规范吗?这意味着常规字符串不能包含数字、空格或下划线。在我们提供帮助之前,您需要定义普通字符串可以包含什么以及如何将其与regexp区分开来。除非您有一个非常严格的规范,否则这可能是不可能的,因为您的“普通字符串”也可能是有效的regexp…这不是我想要的。可能是我的错,问题的形式不正确。编辑了这个问题。