匹配模式并获取部分字符串

     2023-04-13     73

关键词:

【中文标题】匹配模式并获取部分字符串【英文标题】:Match pattern and get parts of string 【发布时间】:2021-11-23 21:02:03 【问题描述】:

我尝试用正则表达式匹配我的 C# 应用程序中的字符串:

MRT01_60DOOO3-0013577

规则是: MRT01_60D 可以包含多个下划线,例如 MRT_01_02_60D 但在最后一个下划线之后,字符串必须是: 整数 + 'D' 或整数 + 'M' 类似:

MRT_01_02_620D 或

MRT_01_02_60M 或

MRT_03_12D

最后一部分:OOO3-0013577 长度必须始终为 12 个字符,并且 '-' 在第 5 位。

检查字符串的匹配后,我想得到 4 个部分:

'MRT01'

'60D'

'OOO3-0013'

'577'

你能帮我找到正则表达式吗?

非常感谢。

埃里克。

【问题讨论】:

字符串总是以“MRT”开头吗?到目前为止你有什么? 指示您将'OOO3-0013577' 分解为'OOO3-0013''577' 的规则是什么? Andrew :字符串并不总是以 "MRT" 开头:这第一部分在其末尾由最后一个取消划线分隔。 Cary:这些部分有固定的长度:第一个为 9,第二个为 3。 【参考方案1】:
(.*)_(\d*[DM])(.4-.4)(.3)
(.*) 找到 MRT 部分(基本上是任何字符 (.) 任意次数 (*) _ D 或 M 部分前的下划线 (\d*[DM]) 查找以 D 或 M ([DM]) 结尾的任意数字 (\d) 位数 (*) ((.4-.4)) 找到 4 个 (4) 任意字符 (.),中间有一个连字符和另外 4 个字符 (.3) 在末尾找到 3 个字符

查看Regex101

您要查找的所有项目都分组 (()),因此请查看比赛的第 1 至 4 组。

【讨论】:

Thomas:感谢您的回答,正如我对 Pavel 所说:第一部分并不总是以 MRT 开头,它可能包含多个下划线,例如:MRT_01_02_620D 或 MRT_01_02_60M 或 AKTT_03_12D @eric.bryan:已更新。下次你应该指定更好或举更多例子。 非常感谢 Thomas:您的解决方案完全符合我的需求。也非常感谢 Pavel 的回答。【参考方案2】:

对于这两个字符串:

MRT01_60DOOO3-0013577
MRT_01_60MOOO3-0013577

正则表达式 (MRT.*?\d2).*(\d2D|\d2M)(.4-.4)(.3) 将匹配以下内容:

group 1     MRT01
group 2     60D
group 3     OOO3-0013
group 4     577

group 1     MRT_01
group 2     60M
group 3     OOO3-0013
group 4     577

在捕获和构造字符串之后,使用您选择的语言 (C#),只需使用替换字符来替换您不想要的字符,例如 _

【讨论】:

Pavel:感谢您的回答,第一部分并不总是以 MRT 开头,它可能包含多个下划线,例如:MRT_01_02_620D 或 MRT_01_02_60M 或 AKTT_03_12D

正则表达式:获取字符串的匹配和“不匹配”部分

】正则表达式:获取字符串的匹配和“不匹配”部分【英文标题】:Regex:Getmatchingand"notmatching"partsofstring【发布时间】:2021-02-0915:04:10【问题描述】:我有一个这样的字符串:%1n--%2n##%12n我需要所有匹配%1n、%2n、%12n的匹配... 查看详情

字符串模式匹配算法sunday算法

  Sunday算法的思想类似于BM算法中的坏字符思想。差别在于Sunday算法在失配之后,是取目标串中当前和模式串匹配的部分后面一个位置的字符来做坏字符匹配。  举例:    BM算法在b与x失配后,坏字符为b(下标1),在模... 查看详情

pandas str.contains 匹配多个字符串并获取匹配的值

】pandasstr.contains匹配多个字符串并获取匹配的值【英文标题】:pandasstr.containsmatchagainstmultiplestringsandgetthematchedvalues【发布时间】:2017-08-0914:08:14【问题描述】:在下面的示例中,我能够将包含文本数据的pandas列与多个字符串集... 查看详情

java示例代码_使用模式匹配获取子字符串

java示例代码_使用模式匹配获取子字符串 查看详情

如何匹配整个字符串而不仅仅是部分?

】如何匹配整个字符串而不仅仅是部分?【英文标题】:Howtogetamatchanentirestringinsteadofjustparts?【发布时间】:2014-09-3020:54:14【问题描述】:我有一个正则表达式列表,我遍历这些正则表达式以查找字符串的匹配模式。我想获取与... 查看详情

如何编写正则表达式模式来获取匹配的字符串?

】如何编写正则表达式模式来获取匹配的字符串?【英文标题】:Howtowritetheregexpatterntogetthematchedstring?【发布时间】:2016-12-0117:08:27【问题描述】:正在努力为以下字符串编写正则表达式模式。我使用以下模式来获取匹配的字符... 查看详情

字符串匹配正则表达式模式并替换为匹配的问题

】字符串匹配正则表达式模式并替换为匹配的问题【英文标题】:IssuewithstringmatchingtheRegexpatternandreplacingwithmatched【发布时间】:2020-07-1201:25:29【问题描述】:要求包含dd/mm/yyyyhh:mm格式的表数据的字符串变量text2需要用="dd-MMM-y... 查看详情

GraphQL:获取部分字符串匹配

】GraphQL:获取部分字符串匹配【英文标题】:GraphQL:Getpartialstringmatches【发布时间】:2018-04-0622:52:39【问题描述】:我正在通过graphQL访问一个mongoDB集合。这是数据库数据:"_id":ObjectId("59ee1be762494b1df1dfe30c"),"itemId":1,"item":"texture","__... 查看详情

从字符串创建正则表达式匹配模式

】从字符串创建正则表达式匹配模式【英文标题】:Createregexmatchpatternfromastring【发布时间】:2018-07-1513:37:07【问题描述】:有没有办法使用c#或vb获取一个字符串(在本例中为电话号码)并从中构造一个正则表达式匹配字符串,... 查看详情

正则表达式-(?!),(?:),(?=)(代码片段)

...(?=pattern)非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如,“Wi 查看详情

如何匹配模式并从多行字符串中删除整行

】如何匹配模式并从多行字符串中删除整行【英文标题】:HowdoImatchpatternanddeletethewholelinefrommultiplelinesstring【发布时间】:2021-11-1513:24:27【问题描述】:我有这个多行字符串IP5002<IP5002<abcbbdbdbdabcbbdbdbdabcbbdbdbdabcbbdbdbd;我正在尝... 查看详情

检查字符串是不是包含模式,忽略位置。并返回项目匹配的索引

】检查字符串是不是包含模式,忽略位置。并返回项目匹配的索引【英文标题】:Checkingifstringcontainspattern,withplacesignored.Andreturningtheindexfromwhichtheitemsmatch检查字符串是否包含模式,忽略位置。并返回项目匹配的索引【发布时间】... 查看详情

Python Regex 将字符串匹配为模式并返回数字

】PythonRegex将字符串匹配为模式并返回数字【英文标题】:PythonRegextomatchastringasapatternandreturnnumber【发布时间】:2011-09-1616:31:54【问题描述】:我有一些行代表文本文件中的一些数据。它们都是以下格式:s=\'TheBearsSUCCESSNumberofwins:... 查看详情

R中的快速部分字符串匹配

】R中的快速部分字符串匹配【英文标题】:FastpartialstringmatchinginR【发布时间】:2014-08-0702:44:03【问题描述】:给定一个字符串向量texts和一个模式向量patterns,我想为每个文本找到任何匹配的模式。对于小型数据集,这可以在R... 查看详情

Pandas 从第二个数据帧动态模式匹配并提取字符串

】Pandas从第二个数据帧动态模式匹配并提取字符串【英文标题】:Pandasdynamicallypatternmatchfromseconddataframeandextractstring【发布时间】:2020-05-2116:28:07【问题描述】:尝试从第二个数据框列表动态构建正则表达式提取模式并用字符串... 查看详情

将字符串匹配到多个正则表达式模式并返回组号

】将字符串匹配到多个正则表达式模式并返回组号【英文标题】:Matchastringtomultipleregexpatternsandreturnthegroupnumber【发布时间】:2019-07-1514:00:49【问题描述】:我正在使用Matcher类在Java中处理正则表达式这里是我所拥有的描述:我有... 查看详情

是否可以将字符串与数据库条目匹配并在字符串的一部分匹配时获得结果?

】是否可以将字符串与数据库条目匹配并在字符串的一部分匹配时获得结果?【英文标题】:Isitpossibletomatchstringwithdatabaseentryandgetresultwhereapartofstringgetmatched?【发布时间】:2021-07-2113:51:42【问题描述】:实际上我正在保存我的用... 查看详情

正则匹配

 ^(?:[1-9][0-9]*.[0-9]{2}?|0.[0-9]{2})$  匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用"或"字符(|)来组合一个模式的各个部分是很有用。例如,‘industr(?:y|ies)就是一个比‘indust... 查看详情