根据我的理解,
(.)(?<!\1)
Run Code Online (Sandbox Code Playgroud)
永远不应该匹配.实际上,php preg_replace甚至拒绝编译这个,所以ruby也是如此gsub.python re模块似乎有不同的意见:
import re
test = 'xAAAAAyBBBBz'
print (re.sub(r'(.)(?<!\1)', r'(\g<0>)', test))
Run Code Online (Sandbox Code Playgroud)
结果:
(x)AAAA(A)(y)BBB(B)(z)
Run Code Online (Sandbox Code Playgroud)
任何人都可以为这种行为提供合理的解释吗?
这种行为似乎是限制了在re模块.替代regex模块似乎正确处理断言中的组:
import regex
test = 'xAAAAAyBBBBz'
print (regex.sub(r'(.)(?<!\1)', r'(\g<0>)', test))
## xAAAAAyBBBBz
print (regex.sub(r'(.)(.)(?<!\1)', r'(\g<0>)', test))
## (xA)AAA(Ay)BBB(Bz)
Run Code Online (Sandbox Code Playgroud)
请注意,不同的是pcre,regex还允许可变宽度的lookbehinds:
print (regex.sub(r'(.)(?<![A-Z]+)', r'(\g<0>)', test))
## (x)AAAAA(y)BBBB(z)
Run Code Online (Sandbox Code Playgroud)
最终,regex将被包含在标准库中,如PEP 411中所述.
PEP 8未提及切片运算符.根据我的理解,与其他运算符不同,它不应该用空格包围
spam[3:5] # OK
spam[3 : 5] # NOT OK
Run Code Online (Sandbox Code Playgroud)
在使用复杂表达式时,这是否成立,即哪一个被认为是更好的样式
1. spam[ham(66)//3:44+eggs()]
2. spam[ham(66) // 3: 44 + eggs()]
3. spam[ham(66) // 3 : 44 + eggs()]
4. something else?
我有一个长时间运行的进程,它在文件中写了很多东西.结果应该是一切或什么都没有,所以我写一个临时文件并在最后将其重命名为真实姓名.目前,我的代码是这样的:
filename = 'whatever'
tmpname = 'whatever' + str(time.time())
with open(tmpname, 'wb') as fp:
fp.write(stuff)
fp.write(more stuff)
if os.path.exists(filename):
os.unlink(filename)
os.rename(tmpname, filename)
Run Code Online (Sandbox Code Playgroud)
由于以下几个原因,我对此并不满意:
有什么建议如何改进我的代码?有没有可以帮助我的图书馆?
因此,我尝试join()在将字符串拆分为单词和标点符号后使用,但它将字符串与单词和标点符号之间的空格连接起来。
b = ['Hello', ',', 'who', 'are', 'you', '?']
c = " ".join(b)
但这会返回:
c = 'Hello , who are you ?'
而且我要:
c = 'Hello, who are you?'
我正在寻找一种有效的方法来查明两个数组是否包含相同数量的相等元素(在==某种意义上),以任何顺序:
foo = {/*some object*/}
bar = {/*some other object*/}
a = [1,2,foo,2,bar,2]
b = [bar,2,2,2,foo,1]
sameElements(a, b) --> true
Run Code Online (Sandbox Code Playgroud)
PS.请注意,线程中的每个解决方案都使用===而不是==用于比较.这对我的需求很好.
function bar() {
return foo;
foo = 10;
function foo() {}
var foo = 11;
}
console.log(typeof bar());Run Code Online (Sandbox Code Playgroud)
typeof bar返回功能?!为什么不数?
如何编写一个完全匹配相同字符(或理想情况下,同一组)的N次重复的表达式?基本上,(.)\1{N-1}做,但有一个重要的限制:表达式应该如果这个问题重复失败多了N倍.例如,给定N=4和字符串xxaaaayyybbbbbzzccccxx,表达式应该匹配aaaa和cccc不bbbb.
我没有专注于任何特定的方言,随意使用任何语言.请不要发布仅适用于此特定示例的代码,我正在寻找一般解决方案.
我有一系列的函数,并寻找一种简洁的方法来按顺序调用每一个函数.
fns = [
function a() { console.log('a') },
function b() { console.log('b') },
function c() { console.log('c') },
]
Run Code Online (Sandbox Code Playgroud)
这工作:
fns.map(function (f) { f() })
Run Code Online (Sandbox Code Playgroud)
这样做:
fns.map(function (f) { Function.call.call(f) })
Run Code Online (Sandbox Code Playgroud)
但是这引发了一个TypeError:
fns.map(Function.call.call)
Run Code Online (Sandbox Code Playgroud)
为什么后一个例子不起作用?
x = [8,2,3,4,5]
y = [6,3,7,2,1]
Run Code Online (Sandbox Code Playgroud)
如何以简洁优雅的方式找出两个列表中的第一个公共元素(在本例中为"2")?任何列表都可以是空的,或者没有共同的元素 - 在这种情况下,无可以.
我需要这个来向一个刚接触它的人展示python,所以越简单就越好.
UPD:顺序对我的目的并不重要,但我们假设我正在寻找x中也出现在y中的第一个元素.
我希望一个对象在数字上下文中返回一个值,在字符串上下文中返回一个完全不同的值.以下不起作用.
foo = {
toString: function() { return "string" },
valueOf: function() { return 123 }
}
console.log(foo * 2) // got 246, fine
console.log("hi " + foo) // got "hi 123", want "hi string"
Run Code Online (Sandbox Code Playgroud) python ×6
javascript ×4
regex ×2
.net ×1
arrays ×1
coding-style ×1
file ×1
java ×1
join ×1
perl ×1
punctuation ×1
python-2.7 ×1
python-3.x ×1
split ×1
types ×1