小编blu*_*ubb的帖子

非贪婪解析与pyparsing

我正试图用pyparsing来解析一条线.该行由许多(键,值)组成.我想得到的是(键,值)列表.一个简单的例子:

ids = 12 fields = name
Run Code Online (Sandbox Code Playgroud)

应该导致类似于: [('ids', '12'), ('fields', 'name')]

一个更复杂的例子:

ids = 12, 13, 14 fields = name, title
Run Code Online (Sandbox Code Playgroud)

应该导致类似于: [('ids', '12, 13, 14'), ('fields', 'name, title')]

PS:结果列表中的元组只是一个例子.它可能是一个字典或其他列表或其他什么,它并不重要.

但无论我到现在为止做了什么,我得到的结果如下: [('ids', '12 fields')]

Pyparsing正在吃下一把钥匙,考虑到它也是价值的一部分.

这是一个示例代码:

import pyparsing as P

key = P.oneOf("ids fields")
equal = P.Literal('=')
key_equal = key + equal
val = ~key_equal + P.Word(P.alphanums+', ')

gr = P.Group(key_equal+val)
print gr.parseString("ids = 12 fields = name")
Run Code Online (Sandbox Code Playgroud)

有人能帮我吗 ?谢谢.

python grammar parsing pyparsing

5
推荐指数
1
解决办法
912
查看次数

搜索多个字符串

我知道在文件中查找一个字符串的有效方法(kmp),或文件中的各种字符串(trie)

但是,多年以来,我一直想知道是否有一种方法(并且在某种程度上认为这是不可能的)来搜索多个文件的多个字符串

假设我有一百万个文件,我想回答诸如"查找具有字符串"香蕉","摩托艇"和"白狐""的查询.什么是有效的算法?有吗?

当然,可以在线性时间内搜索要搜索的文件大小.但对于大量的大文件来说,这似乎是不可行的.谷歌的存在似乎表明实际上有一个非常快的算法来做到这一点.也许甚至一个这样的问题,即每个查询只取决于查询大小,而不是文本大小的数据库(当然,这样的算法会涉及输入文件的一些预处理)

我认为必须有一个这样的算法(谷歌做它!)但我的搜索没有发现任何东西.

algorithm complexity-theory search full-text-search

5
推荐指数
1
解决办法
386
查看次数

如何在窗口上模拟 array_agg(distinct x) ?

我有一个用作array_agg窗口函数的查询,即带有over (...)子句。我只想获取此数组聚合中的一组不同值,但这在 Postgres 9.4 中并未实现:

对于以下(简化的)查询,

with test_data(day, daytime, song) as (
      select 'MON', 'morning', 'A'
      union all 
      select 'MON', 'morning', 'B'
      union all
      select 'MON', 'afternoon', 'A'
      union all
      select 'TUE', 'afternoon', 'B'
)
select distinct 
    day, 
    first_value(daytime) over w as started,
    array_agg(distinct daytime) over w as daytimes,
    array_agg(distinct song) over w as songs 
from test_data
window w as (partition by day order by daytime ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING);
Run Code Online (Sandbox Code Playgroud)

Postgres 返回以下内容:

SQLERROR …
Run Code Online (Sandbox Code Playgroud)

sql postgresql window-functions

5
推荐指数
1
解决办法
1587
查看次数

有没有更惯用的方式在Kotlin初始化这张地图?

我正在写一个小游戏,其中一部分是跟踪玩家的分数.为此,我将地图初始化如下:

// given: players: List<Player>
var scores: MutableMap<Player, Int> = mutableMapOf(*players.map { it to 0 }.toTypedArray())
Run Code Online (Sandbox Code Playgroud)

困扰我的是我需要使用.toTypedArray()map { it to 0 }之前的结果才能应用扩展运算符*.有办法避免这种情况吗?通过压缩两个数组创建映射时也会出现同样的问题:

// does not compile:
mapOf(*a1.zip(a2))

// works but more verbose:
mapOf(*a1.zip(a2).toTypedArray())
Run Code Online (Sandbox Code Playgroud)

dictionary initialization kotlin

5
推荐指数
2
解决办法
393
查看次数

Postgres何时检查唯一约束?

我有一列sort_order具有唯一约束的列。以下SQL在Postgres 9.5上失败:

UPDATE test
SET sort_order = sort_order + 1;

-- [23505] ERROR: duplicate key value violates unique constraint "test_sort_order_key"
--   Detail: Key (sort_order)=(2) already exists.
Run Code Online (Sandbox Code Playgroud)

显然,如果sort_order值在更新之前是唯一的,则在更新之后它们仍将是唯一的。为什么是这样?

相同的语句在Oracle和MS SQL上工作正常,但在MySQL和SQLite上失败。


这是SQL小提琴的完整设置代码:

DROP TABLE IF EXISTS test;
CREATE TABLE test (
  val        TEXT,
  sort_order INTEGER NOT NULL UNIQUE
);

INSERT INTO test
VALUES ('A', 1), ('B', 2);
Run Code Online (Sandbox Code Playgroud)

postgresql unique-constraint

5
推荐指数
1
解决办法
502
查看次数

为什么 Docker 中的 pg_restore 段错误?

我正在 docker 容器内测试我的 postgres 数据库的备份/恢复过程。

我像这样转储我的数据库:

$ docker exec -ti my_postgres_container pg_dump -Fc -U postgres > db.dump
Run Code Online (Sandbox Code Playgroud)

之后,我尝试像这样恢复它:

$ docker cp db.dump my_postgres_container:/db.dump
$ docker exec -ti my_postgres_container pg_restore -U postgres -c -d postgres db.dump
Run Code Online (Sandbox Code Playgroud)

该命令返回时没有输出或错误,但没有任何反应。

因此,我尝试像这样手动恢复它:

$ docker cp db.dump my_postgres_container:/db.dump
$ docker exec -ti my_postgres_container bash
root@fdaad610bee3:/# pg_restore -U postgres -c -d postgres db.dump
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

为什么在尝试读取我的数据库转储时 pg_restore 出现段错误?

postgresql backup database-backups docker

5
推荐指数
2
解决办法
484
查看次数

为什么 Kotlin 接口“未开放”?

在 Kotlin 1.4.30 中,当我输入

open interface I
Run Code Online (Sandbox Code Playgroud)

Kotlin 编译器警告我modifier 'open' is redundant for 'interface'。这完全有道理:当然接口是开放的,否则它们将毫无用处。

但是,反射库似乎与此相矛盾:

interface I
println(I::class.isOpen) // prints 'false'
Run Code Online (Sandbox Code Playgroud)

这有什么意义?的KDocisOpen非常简短:

true 如果这个类是开放的。

Kotlin 中“开放”的确切定义是什么? 我认为这意味着“开放被该文件之外的类进行子类型化的可能性”。

reflection kotlin kotlin-reflect

5
推荐指数
1
解决办法
66
查看次数

Gradle 预编译脚本插件因“表达式...无法作为第一个块的函数调用”而失败

我有以下预编译的脚本插件,它应用了一个 Gradle 核心插件和一个外部插件(通过id(...)

// buildSrc/main/kotlin/my-template.gradle.kts:
import org.gradle.api.JavaVersion

plugins {
    java
    id("com.diffplug.gradle.spotless") // commenting this line "fixes" the problem, WHY?
}

java {
    sourceCompatibility = JavaVersion.VERSION_11
}
Run Code Online (Sandbox Code Playgroud)

与此build.gradle.ktsbuildSrc

// buildSrc/build.gradle.kts:
repositories {
    maven("https://nexus.ergon.ch/repository/secure-public/")
}

plugins {
    `kotlin-dsl`
    id("com.diffplug.gradle.spotless") version "3.25.0"
}
Run Code Online (Sandbox Code Playgroud)

构建失败并显示以下消息: Expression 'java' cannot be invoked as a function. The function 'invoke()' is not found

$ ./gradlew tasks

> Task :buildSrc:compileKotlin FAILED
The `kotlin-dsl` plugin applied to project ':buildSrc' enables …
Run Code Online (Sandbox Code Playgroud)

precompiled gradle gradle-plugin gradle-kotlin-dsl

4
推荐指数
1
解决办法
3630
查看次数

生成可以在以后验证的随机代码

我需要生成验证码并将其发送给客户,以便客户稍后可以提供代码并进行验证.我希望能够在不将验证码存储在数据库中的情况下执行此操作,即代码应该是自包含的.

如何生成代码并防止客户猜测有效代码是什么?显然,我不能完全排除一个幸运的猜测,但我希望这样的事件的概率相当小,同时保持代码长度小.代码可能包含数字和字母.

例如,一个非常基本的验证码将是这样的:随机生成数字1122.现在,计算验证码11226(1122并附加其校验和6=1+1+2+2).因此,如果客户发送回来11226我将能够验证它,但当然这很容易被篡改.有没有办法生成这样的代码?

编辑:问题是发送验证码的系统和验证验证码的系统是分开的,这两个系统之间没有共享信息.即使是随机生成的数字(1122在示例中)也无法为验证系统所知.让我再举一个例子:在我的国家,有一个名为"橙色星期三"的东西.如果您有通过短信收到的代码,您可以获得2张电影票的价格(如果您是Orange客户,则发送短信并通过短信接收代码).但是,此代码与任何内容(电话号码或类似内容)无关:我可以将代码提供给其他人,但仍然有效.我需要这种验证码.

random algorithm verification cryptography

3
推荐指数
1
解决办法
2674
查看次数

如何在war的META-INF中放置context.xml?

我正在通过Gradle的war插件构建一个webapp.为了禁用Tomcat的会话持久性,我需要将文件context.xml放在META-INFwar的根目录中.

我尝试了以下方法:

  • 创建src/main/webapp/META-INF/context.xml主项目的文件
  • 创建src/main/resources/META-INF/context.xml主项目的文件

但是,当我使用gradle clean war生成项目时,生成的war文件包含一个META-INF只有一个MANIFEST.MF.好像我的目录被覆盖了.

我如何context.xml参加战争?

meta-inf war gradle

2
推荐指数
1
解决办法
4835
查看次数