Py学习  »  Tim Biegeleisen  »  全部回复
回复总数  61
5 年前
回复了 Tim Biegeleisen 创建的主题 » 在python中从字符串中删除特殊字符

您可以尝试删除所有非单词字符:

string_value = "hello ' how ' are - you ? and/ nice to % meet # you"
output = re.sub(r'\s+', ' ', re.sub(r'[^\w\s]+', '', string_value))
print(string_value)
print(output)

hello ' how ' are - you ? and/ nice to % meet # you
hello how are you and nice to meet you

我首先使用的解决方案针对使用模式的所有非单词字符(除了空白) [^\w\s]+ . 但是,有可能留下两个或更多空间的集群。所以,我们再打电话给 re.sub 删除多余的空格。

5 年前
回复了 Tim Biegeleisen 创建的主题 » 关键字“with”在MySQL 8工作台中不起作用

问题是一旦你消费了 converted 中的CTE offending converting 两次:

WITH converted1 AS (
    SELECT CONVERT(v using utf8mb4) COLLATE utf8mb4_0900_ai_ci AS v FROM t
),
converted2 AS (
    SELECT CONVERT(v using utf8mb4) COLLATE utf8mb4_0900_ai_ci AS v FROM t
),
offending AS (
    SELECT v FROM converted1 GROUP BY v HAVING COUNT(*) > 1
),
duplicates AS (
    SELECT c.v FROM converted2 c
    INNER JOIN offending o ON c.v = o.v
)
SELECT *
FROM duplicates a
INNER JOIN duplicates b
    ON a.v = b.v AND
       a.v COLLATE utf8mb4_bin > b.v COLLATE utf8mb4_bin;
5 年前
回复了 Tim Biegeleisen 创建的主题 » mysql中的数据统计后如何求和?

你应该先联合,然后聚合:

SELECT
    eventid,
    sentiment,
    COUNT(*) AS cnt
FROM
(
    SELECT eventid, sentiment FROM tablea
    UNION ALL
    SELECT eventid, sentiment FROM tableb
) t
-- WHERE eventid = 10     -- optional
GROUP BY
    eventid,
    sentiment;
5 年前
回复了 Tim Biegeleisen 创建的主题 » 无法使用regex和python查找特定字符串(中间有通配符)[duplicate]

使用非贪婪模式:

\b[AH]\[.*?\]

Python脚本:

inp = "UNCKEV\nPumpkins 10/1/20-2030\nRunners\nha\nH[ 12 ]\nA[ O ]\nKNOWLEDGI\nPLA\nDISTRIBUTION\nHOME TEAM\nPINK VISITING TEAM\nBLANCHE BUREAU NATIONAL\nJAUNE \u00c9C\nALE\nPR\u00c9CISER LES DE\nSEULEMENT\nOFF\nSORTIE\nSTART\nD\u00c9BUT\nON\nRETOUR\nPER\nP\u00c9R.\nMIN\nSERV\nPURG\nOFFENCE\nINFRACTION\nDUR\u00c9E\nNo.\nDU\nNeinterferCACE =\n188 Cross clicak 3\n1010hgh shicle\n"
matches = re.findall(r'\b[AH]\[.*?\]', inp)
print(matches)

这张照片:

['H[ 12 ]', 'A[ O ]']

我会使用这个版本:

SELECT STR_TO_DATE('1/1/2016 12:00:00.000 PM', '%d/%m/%Y %h:%i:%s.%f %p')
5 年前
回复了 Tim Biegeleisen 创建的主题 » 如何使用Python从字符串中获取值

这里有一种方法,使用 re.search 有五个捕捉组按预期方式将输出拼凑在一起:

inp = '<NOV 20, 2017 5:20:17, 20PM IST> <Summary> <USER-1000-1 2017-11-20 08:150:80, 2000'
match = re.search(r'^<(\w{3}) (\d+), (\d{4}).*\bUSER-(\d+).*\b\d{4}-\d{2}-\d{2} (.*?),.*$', inp)
if match:
    print("Date: " + match.group(2) + "-" + match.group(1) + "-" + match.group(3))
    print("USER: " + match.group(4))
    print("Time: " + match.group(5))

这张照片:

Date: 20-NOV-2017
USER: 1000
Time: 08:150:80

请注意,即使使用regex,拆分也可能不是最好的方法,因为没有明确的分隔符可以在任何地方工作。

5 年前
回复了 Tim Biegeleisen 创建的主题 » 如果搜索长度大于列长度的字符串,则对MySQL SELECT查询的影响

对此我没有文档参考,但从我的观察测试结果来看,MySQL将把等式表达式的两边都转换为RHS上字符串文本的长度。也就是说,MySQL将执行以下查询:

SELECT *
FROM yourTable
WHERE CAST(name AS CHAR(100)) = CAST('longgg... ...string' AS CHAR(100));
-- assuming it has a length of 100

这种比较通常会失败,因为MySQL不会在LHS上填充少于100个字符的字符串,这意味着长度通常不会匹配。

6 年前
回复了 Tim Biegeleisen 创建的主题 » 如何查找一个文本中出现了多少个关键字并使用mysql进行排序?

你可以试着把你的电流求和 LIKE 表达。我建议使用 REGEXP 但是:

SELECT
    PlaceID,
    (PlaceDescription REGEXP '[[:<:]]tokyo[[:>:]]') +
    (PlaceDescription REGEXP '[[:<:]]restaurant[[:>:]]') AS Count
FROM Place
WHERE
    PlaceDescription REGEXP '[[:<:]]tokyo|restaurant[[:>:]]';

注意,我正在进行regex搜索 \btokyo\b \brestaurant\b ,意思是 正则表达式 只会找到那些确切的词,两边都有词的界限。还要注意 正则表达式 不区分大小写,因此 tokyo Tokyo 会被捡起来数数。

6 年前
回复了 Tim Biegeleisen 创建的主题 » 在mysql中加入查询时如何更改列名

您可以为 name 两个不同表中的列。

select
    ga.id,
    ga.name as action_name,
    ga.action_owner,
    gu.user_id,
    gu.name as user_name
from grc_action ga
left join grc_users gu
    on ga.action_owner = gu.user_id;

请注意,我还使用了使查询更易于阅读的表别名。一般来说,做 SELECT * 不需要,通常最好显式列出所需的列。

5 年前
回复了 Tim Biegeleisen 创建的主题 » MySQL从另一个表更新值

您可以在此处尝试使用更新联接:

UPDATE songs s
LEFT JOIN artists a
    ON a.name = s.artist
SET artist_id = a.artist_id;
6 年前
回复了 Tim Biegeleisen 创建的主题 » 为将来的git提交设置提交消息

老实说,如果你很难记住你在当前提交中所做的事情,我可能会质疑你在提交之前是否会处于一个良好的状态——检查所有代码也许你应该投资于像吉拉这样的问题追踪者。

这就是说,你在这里可能会发现一个有用的诀窍,就是从一个虚拟提交开始,在这里你只需要在某个地方做一个小的更改通过以下方式添加您想要的“未来”提交消息:

git commit -m 'Implement client-side validation'

然后,做你的工作,完成承诺当你要做这项工作时,你可以 修正 上一次提交:

git commit --amend

默认情况下,这将打开一个编辑器窗口,在该窗口中,您将看到未来的提交消息。

5 年前
回复了 Tim Biegeleisen 创建的主题 » 为什么“if(id=max(id),id,id+1)”在mysql中不能正常工作

需要使用子查询获取最大值:

SELECT
    IF(id = (SELECT MAX(id) FROM People), id, id+1) id,
    name
FROM People
ORDER BY id;

当你提到 MAX(id) 在最初的单级查询中,您告诉mysql以表级聚合模式执行查询。这意味着它只返回一条记录,表示整个表的聚合。通过切换到子查询,它将按您所需的方式运行顺便说一下,如果您使用的是mysql 8+,那么我们可以在这里使用分析函数来减少查询的冗长:

SELECT
    IF(id = MAX(id) OVER (), id, id+1) id,
    name
FROM People
ORDER BY id;
6 年前
回复了 Tim Biegeleisen 创建的主题 » 为什么我的元音去除功能不起作用?(python 2.7)[副本]

python中的字符串是不可变的,因此您需要使用rhs上的替换项对原始字符串进行赋值:

if (t.lower()=='a' or t.lower()=='e' or t.lower()=='i' or t.lower()=='u'):
    string = string.replace(t, " ")

但是,你也可以 re.sub 在这里:

string = re.sub(r'[aeiou]+', '', string, flags=re.IGNORECASE)
5 年前
回复了 Tim Biegeleisen 创建的主题 » mysql:我如何在列中检索两个id相同但值不同的行

使用旋转逻辑查找每个键所需的值。子查询别名为 d2 按邮递方式汇总,只返回支付方式为VISA的邮递。然后我们加入你的原创 data 此子查询的表,仅限于您要查看的文章。

SELECT
    d1.post_id,
    d1.meta_key,
    d1.meta_value
FROM data d1
INNER JOIN
(
    SELECT post_id
    FROM data
    GROUP BY post_id
    HAVING MAX(CASE WHEN meta_key = 'payment_method' THEN meta_value END) = 'visa'
) d2
    ON d1.post_id = d2.post_id
WHERE
    d1.meta_key IN ('payment_method', 'order_total')
ORDER BY
    d1.post_id,
    d1.meta_key DESC;

screen capture from demo

Demo

5 年前
回复了 Tim Biegeleisen 创建的主题 » 我不在准备好的mysql语句中使用,我是oop php daskite中的新手

这个 bind_result() 函数应提供 u 我是说, p d 在变量中 $u 我是说, $p ,和 $d ,对于结果集中的每个记录。因此,您可以尝试以下操作:

$stmt = $this->mysqli->prepare("SELECT u, p, d FROM pump_price");
$stmt->execute();
$stmt->bind_result($u,$p,$d);

while ($row = $stmt->fetch()) {
    echo "(" . $u . ", " . $p . ", " . $d . ")" . "\n";
}
$stmt->close();
$this->mysqli->close();
6 年前
回复了 Tim Biegeleisen 创建的主题 » git签出到新分支不会刷新索引和工作目录的内容

据我所知,git checkout在切换分支时会在工作目录中携带修改过的文件。这个 documentation 支持此声明:

Git签出<分支>
若要准备使用“分支”,请通过更新工作树中的索引和文件,并将头指向分支来切换到该分支。 将保留对工作树中文件的本地修改,以便它们可以提交到<分支>。

至于git为什么会有这种行为,这可以防止通过更改分支意外地清除工作目录中的更改。

6 年前
回复了 Tim Biegeleisen 创建的主题 » Github回溯到上一次推送

假设您的提交错误的分支已经发布到github,并且其他用户可能已经推送了它,那么您通常会 从字面上来说,就是把那根树枝向后倒。相反,你会用 git revert 要从功能上撤消错误提交,请执行以下操作:

git revert 1a7h3jxk       # where 1a7h3jxk is the SHA-1 hash of the bad commit

GIT回复 实际上添加了 新的 commit在功能上撤消您指定为参数的commit。它还允许指定提交范围的语法。

如果你真的想正式“回溯”你的分支,你 能够 执行硬重置以删除错误提交。例如,要实际删除单个错误提交,可以执行以下操作:

git reset --hard HEAD~1
git push --force origin your_branch

但请注意,执行硬重置意味着您正在重写分支的历史。这意味着您必须强制推送(读取:覆盖)远程上分支的版本。如上所述,这个选项应该 如果除了你之外还有人共享这个分支,请使用。

6 年前
回复了 Tim Biegeleisen 创建的主题 » 在mysql中,如何从一个条件不同的表中选择两个不同的值?

你可以参加两次。每个连接到 userdata 表引入一个用户名:

SELECT
    g.id,
    g.guidUser1,
    u1.username,
    g.guidUser2,
    u2.username AS username2
FROM games g
INNER JOIN userdata u1
    ON g.guidUser1 = u1.guidUser
INNER JOIN userdata u2
    ON g.guidUser2 = u2.guidUser;

enter image description here

Demo

6 年前
回复了 Tim Biegeleisen 创建的主题 » 在mysql中,regexp alwasy的计算结果为true

这个 REGEXP 早于8+的MySQL版本中的运算符不支持 \d 代表一个数字。相反,你应该使用 [0-9] :

IF NEW.labelValue NOT REGEXP '[12][0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])'
THEN
    SET @err_msg = CONCAT(NEW.labelValue, ' Invalid date format. Please make sure it conforms to YYYYMMDD.');

下面是一个演示,说明上面的regex实际上可以在mysql 5.7中正常工作:

Demo

6 年前
回复了 Tim Biegeleisen 创建的主题 » mysql-匹配的返回模式

在mysql 8+中,使用 REGEXP_REPLACE :

SELECT REGEXP_REPLACE(input, '^.*\\bI like (dogs|cats)\\b.*$', '$1') AS output
FROM yourTable;
6 年前
回复了 Tim Biegeleisen 创建的主题 » 正则表达式python数据提取

这里有一个选项 re.findall :

input = "TASK000123-Tomcat server hosted on tbu.test1 is down-P1 --In Progress\nTASK000123-Tomcat server hosted on tbu.test1 is down-P1 --Completed"
results = re.findall(r"(TASK\d+).*?-(P\d+) --(.*)(?=\n|$)", input)
print(results)

[('TASK000123', 'P1', 'In Progress'), ('TASK000123', 'P1', 'Completed')]

注意 DOT ALL 这里不需要模式,因为我们不需要 .* 跨行匹配。而且,上面的方法在没有使用 MULTILINE 模式也一样。

6 年前
回复了 Tim Biegeleisen 创建的主题 » jquery datatable:使用左联接和where子句的计数记录

在早于8+的MySQL版本中,我们可以使用子查询查找计数,然后加入它:

SELECT
    t1.techid,
    t1.name,
    t2.techid,
    t2.customer,
    t2.callstatus,
    t2.serialnumber,
    COALESCE(t3.num_tickets, 0) AS num_tickets
FROM team t1
LEFT JOIN tickets t2
    ON t1.techid = t2.techid AND t2.callstatus = 'Dispatch'
LEFT JOIN
(
    SELECT t1.techid, COUNT(*) AS num_tickets
    FROM team t1
    INNER JOIN tickets t2
        ON t1.techid = t2.techid
    WHERE t2.callstatus = 'Dispatch'
) t3
    ON t1.techid = t3.techid;

使用mysql 8+或更高版本,我们可以利用分析功能:

SELECT
    t1.techid,
    t1.name,
    t2.techid,
    t2.customer,
    t2.callstatus,
    t2.serialnumber,
    COUNT(t2.customer) OVER (PARTITION BY t1.techid) num_tickets
FROM team t1
LEFT JOIN tickets t2
    ON t1.techid = t2.techid AND t2.callstatus = 'Dispatch';

编辑:

你完全改变了你的问题,使我第一个接受的答案无效。以下是新查询:

SELECT
    t1.techid,
    COUNT(t2.customer) AS num_tickets
FROM team t1
LEFT JOIN tickets t2
    ON t1.techid = t2.techid AND t2.callstatus = 'Dispatch'
GROUP BY
    t1.techid;
6 年前
回复了 Tim Biegeleisen 创建的主题 » 从mysql获取数据并按类别分组

您可能需要从php表示层处理这个问题。以下是一种方法:

$sql = "SELECT * FROM yourTable ORDER BY category, cars";
$result = $conn->query($sql);
$category = NULL;

echo "<table colspan=\"3\">";

if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        if ($category != $row["category"]) {
            echo "<tr><td colspan=\"3\">" . $row["category"] . "</tr>";
            echo "<tr><td>Cars</td><td>1 Days</td><td>3 Days</td></tr>";
            $category = $row["category"];
        }
        echo "<tr>";
        echo "<td>" . $row["cars"] . "</td>";
        echo "<td>" . $row["1days"] . "</td>";
        echo "<td>" . $row["3days"] . "</td>";
        echo "</tr>";
    }
    echo "</table>";
}

上面的代码使用逻辑,当在结果集中看到一个尚未看到的类别时,该逻辑将打印两个标题行。第一个标题行只包含类别,第二个包含表中三列的标题。

这里一个重要的注意事项是我们使用 ORDER BY category, cars 在mysql查询中强制执行我们希望的结果集数据顺序。不使用 ORDER BY ,我们的方法可能行不通。

6 年前
回复了 Tim Biegeleisen 创建的主题 » 在mysqli pdo中如何使用带限制的select?

不能为中的值使用参数 LIMIT 范围在mysql中。解决方法之一可能是使用行数,然后限制为一系列值:

SELECT *
FROM
(
    SELECT t.*,
        @rn := @rn + 1 AS rn
    FROM tab t,
       (SELECT @rn := 0) r
) t
WHERE rn BETWEEN :start AND :end;

例如,如果您想要第4和第5个记录,您可以使用:

$stmt = $con->preapre($sql1);
$stmt->execute(['start'=>4, 
'end'=>5]);
$array = $stmt->fetchAll();

考虑到您在错误的分支上完成了工作,这里要做的适当的事情是找到将工作转移到正确分支的方法。一种选择是挑选错误的提交 develop feature :

# from feature
git cherry-pick <SHA-1 of develop commit>

然后,从中删除不正确的提交 发展 :

# from develop
git reset --hard HEAD~1

请注意,如果您还没有创建 特征 分支,然后解决方案变得更简单:

# from develop
git branch feature
git reset --hard HEAD~1

这将创建一个新分支 特征 从…开始 发展 如果您已经提交了,那么它将从 发展 .

6 年前
回复了 Tim Biegeleisen 创建的主题 » 在列表python中拆分单个字符串

一种方法,使用 join split :

items = ' '.join(data)
terms = items.split(' ')
print(terms)

['Esperanza', 'Ice', 'Cream', 'Gregory', 'Johnson', 'Brandies', 'bar', 'and', 'grill']

这里的想法是生成一个包含所有空格分隔项的字符串。那么,我们只需要一次调用非regex版本的 分裂 以获得输出。

6 年前
回复了 Tim Biegeleisen 创建的主题 » mysql选择distinct,但仅当第二列全部为1时才选择distinct?

这里的一种方法是 search_num 然后断言 complete 出现的值为1。

SELECT search_num
FROM yourTable
GROUP BY search_num
HAVING MIN(complete) = MAX(complete) AND MIN(complete) = 1;
6 年前
回复了 Tim Biegeleisen 创建的主题 » python中url的正则表达式

一个简单的解决方法就是替换模式 https?://\S+ 使用空字符串:

article_example = "眼影盤長這樣 http://i.imgur.com/uxvRo3h.jpg 說真的 很不好拍"
output = re.sub(r'https?://\S+', '', article_example)
print(output)

打印内容:

眼影盤長這樣  說真的 很不好拍

我的模式假设后面的非空白字符 http:// https:// 是URL的一部分。

6 年前
回复了 Tim Biegeleisen 创建的主题 » 在MySQL5.7的这个查询中,有什么问题?

CASE

CASE WHEN Ventas_Total = 0 THEN 'C'
     WHEN Ventas_Total > 100 THEN 'S'
     WHEN Ventas_Total < 100 THEN 'L'
END AS Categoria

CASE Ventas_Total
    WHEN 1 THEN 'A'
    WHEN 2 THEN 'B'
    WHEN 3 THEN 'C' END AS some_alias
6 年前
回复了 Tim Biegeleisen 创建的主题 » 返回mysql查询中所有的wow、mached和unmatched

SELECT
    po.position_id,
    po.position_name,
    COALESCE(pe.people_name, 'EMPTY') AS STATUS
FROM position po
LEFT JOIN people pe
    ON po.position_id = pe.people_position_id;

people

SELECT
    po.position_id,
    po.position_name,
    COALESCE(pe.people_name, 'EMPTY') AS STATUS
FROM people pe
RIGHT JOIN position po
    ON po.position_id = pe.people_position_id;