很抱歉张贴问题,其他问题也已回答。但是,无法弄清楚此解决方案出了什么问题。这个问题需要找到在每边都被3个大写字母包围的小写字母。我写的代码:
q = ''
for i in range(4,len(x)-4):
if x[i].islower() and x[i-4].islower() and x[i+4].islower() and x[i-3:i].isupper() and x[i+1:i+4].isupper() :
q+=x[i]
print(q)
我得到的字符串是
'lgvcaaginbkvsoezhtlnldslyitlooqfgiksudtm' vs“链表”
感谢您的帮助。
编辑:由于某种原因,以下代码似乎可以正常工作:
q = ''
for i in range(4,len(x)-4):
if x[i].islower() and x[i-4].islower() and x[i-3:i].isupper() and x[i+1:i+4].isupper() and x[i+4].islower():
q+=x[i]
print(q)
答案 0 :(得分:1)
这将是切片解决方案:
t = "This is some TEXtTHAt will result in one true result"
def notupper(x):
return not x.isupper()
yep = []
# lookup function to execute inside all()
terms = {0:notupper, 8:notupper, 4:notupper}
for part in (t[i:i+9] for i in range(len(t)-7)):
if len(part)<9: # fix for XXXxXXX at end of string
part = (part+" ")[:9]
if all(terms.get(index,str.isupper)(ch) for index,ch in enumerate(part)):
print("Statisfies all terms: ", part)
它将文本切成9个字符的部分(您需要9来确保没有XXXXyXXXX-您需要在下半部周围恰好三个上半部。
它在位置0,8和4上检查notupper
的切片文本:
XXXXxXXXX
012345678
lUUUlUUUl # must statisfy: l=notupper and U=isupper
通过从terms
词典中提取此功能来。 part
中所有没有匹配关键字的索引terms
使用str.isupper
的默认参数与terms.get(index,str.isupper)
进行测试
all()
确保所有测试都需要评估为true才能输入if条件。
对于isupper和islower(),空格的求值为False
。
阅读:
您可以将dict/all
部分替换为:
# the ( .. ) are needed to enable line breaking - you could use \ as well
if notupper(part[0]) and notupper(part[8]) and notupper(part[4]) and (
part[1].isupper() and part[2].isupper() and part[3].isupper() and
part[5].isupper() and part[6].isupper() and part[7].isupper()):
print("Statisfies all terms: ", part)
如果这对于您当前的python级别而言太复杂了。
答案 1 :(得分:1)
您要尝试的是匹配一个模式:不上,上,上,上,不上,上,上,上,不上。如果对字符串使用签名,则更容易捕获:
>>> t = "This is some TEXtTHAt will result in one true result"
>>> sig = "".join("U" if c.isupper() else "l" for c in t)
>>> sig
'UllllllllllllUUUlUUUllllllllllllllllllllllllllllllll'
您正在lUUUlUUUl
字符串中寻找sig
子字符串。 Python没有findall
的内置函数,但是您可以迭代find
的结果:
>>> result = ""
>>> i = sig.find("lUUUlUUUl")
>>> while i != -1: # find != -1 means that the substring wasn't found
... result += t[i+4] # the center `l`
... i = sig.find("lUUUlUUUl", i+4) # we can start the next search at the center `l`
...
>>> print( result )
t
您也可以将re.finditer
与正则表达式一起使用,但更为复杂。
答案 2 :(得分:-1)
文本在每行末尾都有换行符“\n”。您需要用空字符串替换所有“\n”字符。这可以使用 RegEx(正则表达式)模块来完成。添加这些代码行,它将起作用:
const PostSchema = new mongoose.Schema(
{
userId: {
type: String,
required: true,
},
desc: {
type: String,
max: 500
},
img: {
type: String,
},
likes: {
type: Array,
default: [],
},
},
{ timestamps: true }
);