我想找到其中没有.个字符的字符串,在字符串的末尾可以 Select 出现这个字符.

我像那样搜索了一些提示,但没有解决我的问题.

^(?!\.)(?!.*\.$)(?!.*\.\.)[a-zA-Z0-9_.]+$
(?!\.) - don't allow . at start
(?!.*\.\.) - don't allow 2 consecutive dots
(?!.*\.$) - don't allow . at end

我试着用

str_l  = ["aaa.bbb.","aaa.","aaa"]
for str1 in str_l:
  res1 = re.search(r'(.*?!.*$)', str1) #if .not in string, return True
  res2 = re.search(r'(?<!(.).$)',str1) # if . only appear at the end of string, return True, but not solved
  print(res1,res2)

我想将res1res2组合成一个正则表达式,字符串的结果类似于False, True, True.

推荐答案

您可以使用

import re
str_l  = ["aaa.bbb.","aaa.","aaa"]
for str1 in str_l:
  print(str1, '=>', bool(re.search(r'^[^.]*.?$', str1)))

输出:

# => aaa.bbb. => False
aaa. => True
aaa => True

请参见Python demo.Details:

  • ^-字符串开头
  • [^.]*-除点以外的零个或更多字符
  • .?-可选点
  • $-在字符串末尾.

要使用此正则表达式从列表中获取有效字符串,可以使用

rx = re.compile(r'^[^.]*.?$')
print( list(filter(rx.search, str_l)) )
# => ['aaa.', 'aaa']

Python相关问答推荐

不理解Value错误:在Python中使用迭代对象设置时必须具有相等的len键和值

从numpy数组和参数创建收件箱

如何制作10,000年及以后的日期时间对象?

如何列举Pandigital Prime Set

基于字符串匹配条件合并两个帧

使用groupby Pandas的一些操作

Python虚拟环境的轻量级使用

无法使用requests或Selenium抓取一个href链接

ODE集成中如何终止solve_ivp的无限运行

将9个3x3矩阵按特定顺序排列成9x9矩阵

Pandas—在数据透视表中占总数的百分比

交替字符串位置的正则表达式

巨 Python :逆向猜谜游戏

使用Python异步地持久跟踪用户输入

操作布尔值的Series时出现索引问题

为什么我的scipy.optimize.minimize(method=";newton-cg";)函数停留在局部最大值上?

将相应的值从第2列合并到第1列(Pandas )

Stats.ttest_ind:提取df值

无法使用请求模块从网页上抓取一些产品的名称

按列表分组到新列中