首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python 3在用户输入中查找特定的元字符或字母

Python 3在用户输入中查找特定的元字符或字母
EN

Stack Overflow用户
提问于 2018-06-16 02:08:57
回答 2查看 146关注 0票数 1

我正在尝试制作一个文件夹创建器脚本,它的工作很好,然而,当你键入":“例如没有引号作为文件夹名称,它会做一些奇怪的事情。我写了下面的代码,试图处理任何字符,例如当有人试图使用它们命名文件夹时的字符。下面的代码似乎运行良好,但如果且仅当扩展变量中的一个字符显示为名称的第一个字符时,它才会检测到它并触发异常消息。另外,处理空白/空输入的最好方法是什么,有没有办法将其包含到下面的while循环中,或者是否应该有一个单独的while循环来处理空白输入?

如果有人输入hello:它不会启动消息并尝试继续,但会导致它无法创建文件夹,或者如果它创建了文件夹,则会给它们命名,如1,2等。

如果已经有关于这个问题的帖子了,我很抱歉,但我一直在到处寻找解决这个问题的方法,并且在来这里之前一直在测试不同的解决方法,并尝试了一些建议,但似乎没有检测到输入中的任何字符,而只检测到了第一个字符。也许我可以使用正则表达式并使用自定义集来指定这些字符,但不确定如何设置。谢谢

代码语言:javascript
复制
counter = 0
extensions = (":","?","<",">","|","/","\\") # list of characters that cannot be used for folder names 
while True:
    try:
        folder_name = input("Name of the folder you want. ")
        if folder_name in extensions: # checks the user input to see if any characters match the extensions variable.
            break 
        else:
            raise Exception
    except Exception as e:
        print("You can not have any of these characters in the folder name. ")
        time.sleep(3.5)
        cls()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-16 02:18:04

if folder_name in extensions:不会检查您的评论所暗示的内容。请尝试匹配正则表达式。

您的基于异常的流程不是Pythonic式的。为什么不把folder_name初始化为无效的东西,并在它仍然无效的时候循环呢?

代码语言:javascript
复制
import re

pattern = re.compile(r'[:?<>|/\\]')
folder_name = ''
while not folder_name or pattern.search(folder_name) is not None:
    folder_name = input("Name of the folder you want. ")

not folder_name进一步检查folder_name是否为空。

票数 0
EN

Stack Overflow用户

发布于 2018-06-16 02:33:56

在你的代码中,"if folder_name In extensions:“这一行是有问题的,因为它会检查给定的文件夹名称是否在扩展名列表中。你需要

代码语言:javascript
复制
for a_character in extensions:
    if a_character is in folder_name:
...

这是另一种方法

代码语言:javascript
复制
def check_folder_name(input_name):
    # create a set that has all values to exclude
    exclude = set(':"%/<>^|?\\')
    # check if two sets share any elements
    if set(input_name) & exclude:
        print('Please remove the following characters from the folder name')
        print(list(set(input_name) & exclude))
        return False
    else:
        return True


check_folder_name('sample_correct_folder_name')
>True

check_folder_name('sample:problematic%folder^name')
>Please remove the following characters from the folder name
>[':', '%', '^']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50880723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档