python正则表达式:匹配数字和字母的表达式

python正则表达式:匹配数字和字母的表达式,python,regex,string,Python,Regex,String,其目的是打印所有不以“\u C[任何数字+字母]”结尾的内容 输出: chrome_PM chrome_P chromebike_P1 chromecar_CMale 我如何编辑代码以避免打印“chromecar_CMale” 这应该就可以了。我会扩展regexp以接受单词([0-9a-zA-Z_]): 当然,这将接受字母或数字的任意组合。如果只想将其限制为字母或数字,可以执行以下操作: re.compile('_C(\d+|[a-zA-Z]+)$') 更改您的正则表达式,如下所示 >

其目的是打印所有不以
“\u C[任何数字+字母]”
结尾的内容

输出:

chrome_PM
chrome_P
chromebike_P1
chromecar_CMale
我如何编辑代码以避免打印“chromecar_CMale”


这应该就可以了。

我会扩展regexp以接受单词([0-9a-zA-Z_]):

当然,这将接受字母或数字的任意组合。如果只想将其限制为字母或数字,可以执行以下操作:

re.compile('_C(\d+|[a-zA-Z]+)$')

更改您的正则表达式,如下所示

>>> import re
>>> name_list = ['chrome_PM', 'chrome_P', 'chromerocker_C', 'chromebike_P1', 
                 'chromecar_CMale', 'chromeone_C1254']
>>> for name in name_list:
    if re.search(r'^(?!.*(?:_C\d+|_C)$)(?=.*_C)', name):
        print(name)


chromecar_CMale
说明:

  • ^
    断言我们处于起点
  • (?!.*(:_C\d+|u C)$)
    此负面前瞻断言不会有类似于
    \u C
    一个或多个数字或
    \u C
    紧接着一个线锚的结尾
  • (?=.*u-C)
    断言必须存在类似于
    \u-C
    的子字符串
  • 仅当满足上述条件时,才匹配字符串开始
  • 上面的正则表达式将写为
    ^(?。*.\u C(\d+)$)(?=.*u C)

    • 让我们把逻辑颠倒过来。你正在搜索你不想要的东西,并将它们过滤掉。为什么不去寻找你想要的东西呢

      您的regexp可以如下所示:
      \u C[A-Za-z]+[\D]
      ,其中:

      • \u C
        是您需要的起始C
      • [A-Za-z]+
        多次匹配任何小写/大写字母
      • [\D]
        排除了字母后面的数字,从而避免了像
        chromecar\u CM123
        这样的匹配内容。注:大写字母
        \D
        是速记
        \D
      因此,Python代码将类似于:

      重新导入
      def regexer():
      名称列表=['chrome_PM'、'chrome_P'、'chromerocker_C'、'chromebike_P1',
      ‘chromecar_CMale’、‘chromeone_C1254’]
      counts_tail=re.compile(''u C[A-Za-z]+[\D]')#在此处构建regexp-无需在循环中进行
      对于名称列表中的名称:
      如果计算尾部搜索(名称):
      印刷品名称
      
      下面是正在运行的regexp:


      你想要
      “chromeone_C1254”
      ?这有点让人搞不清楚你在做什么。您当前正在打印未捕获的内容?不清楚您是否要捕获:
      [anyletter][number sequence]
      \u C[number+letter sequence]
      。不要每次在循环中编译该模式。我正在打印任何不以“\u C[anynumber+letter]结尾的内容你应该考虑解释你的代码所做的事情。)好东西!我喜欢你投入其中的消极想法。这不是OP想要的!这正是我想要的。它抓住了任何元素,以“任何数字/字母”结尾。“@Boosted_d16我没有否决票,但是,这个正则表达式任何数字和字母的组合都只包含字母@它捕获任何以“\u C[任何数字/字母]”结尾的元素,那么为什么您不想要
      chromeone\u C1254
      ?@Kasra-我捕获给定元素是为了避免它们。
      re.compile('_C\w+$')
      
      re.compile('_C(\d+|[a-zA-Z]+)$')
      
      >>> import re
      >>> name_list = ['chrome_PM', 'chrome_P', 'chromerocker_C', 'chromebike_P1', 
                       'chromecar_CMale', 'chromeone_C1254']
      >>> for name in name_list:
          if re.search(r'^(?!.*(?:_C\d+|_C)$)(?=.*_C)', name):
              print(name)
      
      
      chromecar_CMale