Py学习  »  Emma  »  全部回复
回复总数  6
6 年前
回复了 Emma 创建的主题 » MongoDB查询以查找可能具有查询字符串变体的文档

编辑: 你可以简单地使用 $regex 在查询中使用表达式 ^ABC(?:.*?)\\d+$

MongoDB文档示例:

db={
  "products": [
    {
      "name": "product A",
      "product": "ABC-123"
    },
    {
      "name": "product B",
      "product": "ABC123"
    },
    {
      "name": "product C",
      "product": "ABC-123"
    }
  ]
}

查询:

db.products.find({
  "product": {
    "$regex": "^ABC(?:.*?)\\d+$"
  }
})

演示: https://mongoplayground.net/p/WdqTg7LCZIk


我们也许能找到这个问题的表达式。或许,让我们从一个类似于以下的表达式开始:

product:\s+"(.+?)"

Demo

product:\s+" 作为左边的边界,我们收集任何字符,然后从右边将其与 " .

const regex = /product:\s+"(.+?)"/gm;
const str = `{
  name: "something"
  product: "ABC-123"
}`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

或者我们可以将其扩展到我们喜欢捕获而不是捕获的内容:

(?:product:\s+")(.+?)(?:")

DEMO

enter image description here

5 年前
回复了 Emma 创建的主题 » 如何在Python2.7中循环重复替换模式匹配?

我猜你可能只是想在你的表达式中添加单词边界,还有 + 好像不见了:

\s\b[0-9]+-[0-9]+\b

但不确定。

测试

import re

l = [' 525-11 Prof.Dr.F.J.A.Kreuzer, Nijmegen  onderzoek met betrekking tot de fysiologie van ademhaling en bloedsomloop op grote hoogte  17.500\n', 
' 527-7 Dr.G.Buyze, Utrecht  onderzoek naar het kopermetabolisme bij geesteszicken  s 9.400\n', 
' 527-8  Prof. Dr. Elisabeth P.Steyn Parv\xc3\xa9, Utrecht onderzoek naar de betekenis van thiaminc voor de synthese van vetzuren in het dierlijk lichaam  s 5.400\n', 
' 532-7 Dr.J.K. Sch\xc3\xb6nfeld, Rotterdam  onderzoek over de rol van de L-fase van bacteri\xc3\xabn bij chronische en recidiverende ziekten (1962)  f 3.100\n', 
' 532-8  A.G.Schuitemaker, Heiloo  onderzoek naar het lytisch vermogen van bacteriofagen voor mycobacteri\xc3\xabn f 2.000\n', 
' 542-13 Dr.B.Leijnse en Dr.H.M. van Praag, Rotterdam  bestudering van het werkingsmechanisme van de anti-depressieve hydrazinen, in bio chemisch en psychiatrisch-psychologisch opzicht  f 16.000\n', 
' 547-7 Dr.H.K.A. Visser, Groningen  onderzoek over de werking van het antidiuretische hormoon en de regulatie van de centrale afgifte van dit hormoon gedurende de kinderleeftijd (1962)  s 9.600\n', 
' 548-4 Dr.F.Schwarz, Utrecht  onderzoek naar de invloed van Exophthalmos Producing Substance op bindweefsel  s 13.000\n', 
' 562-8 Prof. Dr.J.Droogleever Fortuyn, Groningen  onderzoek naar bouw en functie van de middenhersenen (1960-1962) f 13.100\n', 
' '
]

regex = r"(\s\b[0-9]+-[0-9]+\b)"
subst = "\\1\\n"


for index,item in enumerate(l):
    l[index] = re.sub(regex, subst, item)

print(l)

输出

['525-11\n教授F.J.A.Kreuzer,Nijmegen onderzoek met betrekking 范阿德姆哈林酒店 17.500\n','527-7\n Buyze博士,Utrecht onderzoek naar het kopermetabolisme bij geesteszicken s 9.400\n','527-8\n教授。 Elisabeth P.Steyn Parv,乌得勒支onderzoek naar de betekenis van 蒂亚明·沃德·辛瑟斯·范·维特祖伦 5.400\n','532-7\n Dr.J.K.SchÃ131; nfeld,鹿特丹onderzoek over de rol van de L-fase van bacterià ziekten(1962)f 3.100\n','532-8\n A.G.Schuitemaker,海洛 onderzoek naar het lytisch vermogen van细菌学 分枝杆菌素f 2.000,542-13 鹿特丹普拉格最佳范赫特范德 生物化学中的抗抑郁肼 精神病学心理学家opzicht f 16.000\n','547-7\n Dr.H.K.A。 维瑟,格罗宁根·昂德佐克,在德韦金·范赫特·安蒂乌雷蒂街 管理中心管理中心 gedurende Kindereleftijd(1962)第9.600节,第548-4节 F.Schwarz博士,乌得勒支onderzoek naar de invloed van眼球突出症 生产物质op bindweefsel s 13.000\n','562-8\n Prof。 Dr.J.Drooglever Fortuyn,Groningen onderzoek naar bouw en functie博士 范德米登赫森恩(1960-1962)f 13.100,'''

表达式在 regex101.com ,如果您希望浏览/简化/修改它,则在 this link ,如果愿意的话,可以查看它与一些示例输入的匹配情况。

6 年前
回复了 Emma 创建的主题 » 简单的python正则表达式不能按预期工作

此表达式可能会提取这些所需的值:

([0-9]+)\s*-\s*(.*)

Demo

测试

import re

print(re.findall("([0-9]+)\s*-\s*(.*)", "#232 - Hello There"))

输出

[('232', 'Hello There')]
6 年前
回复了 Emma 创建的主题 » regex模式在python中有效,但在c中无效#

我想也许 ^ $ 没有必要。

sln 建议使用以下表达式:

(?<=^|\r?\n)\bTEXT\b

会起作用的 c# 或者蟒蛇。

我不太确定为什么它在python中可以正常工作, ^(TEXT ?)$ 对于这种情况,模式基本上不应该在python中工作,但显然我是不对的。

DEMO

测试

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"(?=^|\r?\n)\bTEXT\b";
        string substitution = @"MTEXT";
        string input = @"TEXT Some data before TEXT some data after

TEXTY Some data before  TEXT 

TEXT Some data before TEXT some data after

TEXT Some data before  TEXT NOTTEXT ";
        RegexOptions options = RegexOptions.Multiline;

        Regex regex = new Regex(pattern, options);
        string result = regex.Replace(input, substitution);
    }
}
6 年前
回复了 Emma 创建的主题 » python regex查找双引号中包含变量的字符串

此表达式可能适用于:

OnUploadCompleted\([0-9]+\s*,\s*\"\/(.+?)\"

我们想要的结果是在这个捕捉组 (.+?) .

Please see the demo for additional explanation.

试验

import re

regex = r"OnUploadCompleted\([0-9]+\s*,\s*\"\/(.+?)\""

test_str = ("<script type=\"text/javascript\">\n"
    "(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e)\n"
    " {};d=d.replace(/.*?(?:\\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();\n"
    "window.parent.OnUploadCompleted(0,\"/userfiles/abc.txt\",\"abc.txt\", \"\") ;</script>")

matches = re.finditer(regex, test_str, re.MULTILINE)

for matchNum, match in enumerate(matches, start=1):

    print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))

    for groupNum in range(0, len(match.groups())):
        groupNum = groupNum + 1

        print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
5 年前
回复了 Emma 创建的主题 » python在两个字符之间替换一个字符并保持rest

这个表情,

(§[^§\r\n]*),([^§\r\n]*§)

作为替代,

\1;\2

可能只是在这里工作。

试验

import re

string = """
§Bandra(West);Mumbai§
§Bandra(West),Mumbai§
§,§
Bandra(West),Mumbai§
"""

print(re.sub(r'(§[^§\r\n]*),([^§\r\n]*§)', r"\1;\2", string))

产量

§Bandra(West);Mumbai§
§Bandra(West);Mumbai§
§;§
Bandra(West),Mumbai§

如果您希望探索/简化/修改表达式,则 在的右上面板上解释 regex101.com . 如果你愿意,你 也可以观看 this link ,如何匹配 对照一些样本输入。