我有下面的代码,它可以查看一个目录中的文件,并将包含某个字符串的文件复制到另一个目录中,但我尝试使用正则表达式,因为字符串可以是大写和小写,也可以是两者的混合。
下面是在我尝试使用RegEx的
import os
import re
import shutil
def test():
os.chdir("C:/Users/David/Desktop/Test/MyFiles")
files = os.listdir(".")
os.mkdir("C:/Users/David/Desktop/Test/MyFiles2")
for x in (files):
inputFile = open((x), "r")
content = inputFile.read()
inputFile.close()
if ("Hello World" in content)
shutil.copy(x, "C:/Users/David/Desktop/Test/MyFiles2")
下面是我尝试使用RegEx的
import os
import re
import shutil
def test2():
os.chdir("C:/Users/David/Desktop/Test/MyFiles")
files = os.listdir(".")
os.mkdir("C:/Users/David/Desktop/Test/MyFiles2")
regex_txt = "facebook.com"
for x in (files):
inputFile = open((x), "r")
content = inputFile.read()
inputFile.close()
regex = re.compile(regex_txt, re.IGNORECASE)
我猜我需要一行代码,类似于
if regex = re.compile(regex_txt, re.IGNORECASE) == True
但我似乎不能得到任何工作,如果有人能指出我在正确的方向,这将是不胜感激。
6条答案
按热度按时间w8rqjzmb1#
您还可以使用
re.search
,具体取决于您希望它如何匹配。您可以运行此示例:
uemypmqf2#
一个月
简单的if-regex示例:
复杂的if-regex示例(模式检查、提取子字符串、不区分大小写):
注:
re.search()
而不是re.match。字符串的匹配方法restricts to the start,一个confusing约定。如果需要,请使用插入符号显式搜索:re.search(r'^...', ...)
(或在多线路模式下使用\A
)r'pattern'
。否则,您需要将反斜杠加两个,如re.search('ing\\b', ...)
'\\b'
或r'\b'
是一个特殊的序列,表示word-boundary,用于正则表达式。不要与'\b'
或'\x08'
backspace混淆。re.search()
没有找到任何内容,则返回None
,始终为falsy。re.search()
找到任何内容,则返回Match对象,这始终是真实的。f0ofjuux3#
REPL使学习API变得很容易,只需运行
python
,创建一个对象,然后请求help
:命令行中显示了以下内容:
search(...)
search(string[, pos[, endpos]])
--〉match对象或None
。扫描字符串以查找匹配项,并返回相应的MatchObject
示例。如果字符串中没有位置匹配,则返回None
。所以你可以
顺便说一句
有一个
.
可以匹配任何字符,所以re.compile("facebook.com").search("facebookkcom") is not None
为真,因为.
可以匹配任何字符。\.
匹配文字"."
字符,而不是将.
视为特殊的正则表达式运算符。r"..."
位意味着正则表达式编译器获得\.
中的转义,而不是python解析器解释它。(?i)
使正则表达式像re.IGNORECASE
一样不区分大小写,但它是独立的。vecaoik14#
首先编译正则表达式,然后必须将其与
match
、find
或其他方法一起使用,以便针对某个输入实际运行该正则表达式。tf7tbtn25#
正则表达式不应该以这种方式使用--除非你想做比你想做的更复杂的事情--例如,你可以把你的内容字符串和比较字符串规范化为:
irtuqstp6#
下面是一个运行示例: