小编geo*_*org的帖子

带有反向引用的不可能的背后隐藏

根据我的理解,

(.)(?<!\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中所述.

python regex python-2.7 python-3.x

12
推荐指数
1
解决办法
522
查看次数

样式,格式化切片运算符

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?

python coding-style

11
推荐指数
1
解决办法
2170
查看次数

Threadsafe和容错文件写入

我有一个长时间运行的进程,它在文件中写了很多东西.结果应该是一切或什么都没有,所以我写一个临时文件并在最后将其重命名为真实姓名.目前,我的代码是这样的:

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)

由于以下几个原因,我对此并不满意:

  • 如果发生异常,它不会正确清理
  • 它忽略了并发问题
  • 它不可重复使用(我需要在我的程序中的不同位置)

有什么建议如何改进我的代码?有没有可以帮助我的图书馆?

python file thread-safety

9
推荐指数
2
解决办法
4074
查看次数

将分割词和标点符号连接到正确的位置

因此,我尝试join()在将字符串拆分为单词和标点符号后使用,但它将字符串与单词和标点符号之间的空格连接起来。

b = ['Hello', ',', 'who', 'are', 'you', '?']
c = " ".join(b)

但这会返回:
c = 'Hello , who are you ?'

而且我要:
c = 'Hello, who are you?'

python split join punctuation

9
推荐指数
1
解决办法
3502
查看次数

将数组比较为(多)集

我正在寻找一种有效的方法来查明两个数组是否包含相同数量的相等元素(在==某种意义上),以任何顺序:

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.请注意,线程中的每个解决方案都使用===而不是==用于比较.这对我的需求很好.

javascript arrays

9
推荐指数
1
解决办法
1311
查看次数

在JavaScript中,在函数内声明变量,为什么函数获得更高的优先级?

    function bar() {
        return foo;
        foo = 10;
        function foo() {}
        var foo = 11;
    }
    console.log(typeof bar());
Run Code Online (Sandbox Code Playgroud)

typeof bar返回功能?!为什么不数?

javascript

9
推荐指数
1
解决办法
1051
查看次数

恰好匹配相同字符的N次重复

如何编写一个完全匹配相同字符(或理想情况下,同一组)的N次重复的表达式?基本上,(.)\1{N-1}做,但有一个重要的限制:表达式应该如果这个问题重复失败了N倍.例如,给定N=4和字符串xxaaaayyybbbbbzzccccxx,表达式应该匹配aaaaccccbbbb.

我没有专注于任何特定的方言,随意使用任何语言.请不要发布仅适用于此特定示例的代码,我正在寻找一般解决方案.

.net python java regex perl

8
推荐指数
2
解决办法
696
查看次数

调用列表中的每个函数

我有一系列的函数,并寻找一种简洁的方法来按顺序调用每一个函数.

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)

为什么后一个例子不起作用?

javascript functional-programming

8
推荐指数
2
解决办法
177
查看次数

两个列表中的第一个共同元素

x = [8,2,3,4,5]
y = [6,3,7,2,1]
Run Code Online (Sandbox Code Playgroud)

如何以简洁优雅的方式找出两个列表中的第一个公共元素(在本例中为"2")?任何列表都可以是空的,或者没有共同的元素 - 在这种情况下,无可以.

我需要这个来向一个刚接触它的人展示python,所以越简单就越好.

UPD:顺序对我的目的并不重要,但我们假设我正在寻找x中也出现在y中的第一个元素.

python

8
推荐指数
3
解决办法
4179
查看次数

Make toPrimitive转换取决于上下文

我希望一个对象在数字上下文中返回一个值,在字符串上下文中返回一个完全不同的值.以下不起作用.

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)

javascript types

8
推荐指数
1
解决办法
364
查看次数