我有以下字符串:\n[Example] \xc3\xb6\xc3\xa4\xc3\xbc\xc3\x9f asdf 1234 (1a\xc3\xb6) (not necessary),
解释:
\n[Example] 可选,不需要
\xc3\xb6\xc3\xa4\xc3\xbc\xc3\x9f asdf 1234我需要的最重要的部分。每个字符、数字、特殊字符以及德语字符都\xc3\xa4\xc3\x84\xc3\xb6\xc3\x96\xc3\xbc\xc3\x9c\xc3\x9f可以在这里找到。
\n贪婪选择可能是防止像德国字符这样的字符的最佳解决方案,对吗?
(1a\xc3\xb6)可选和必需的
(not necessary)可选,不需要。如果出现的话可能是(not ...)或者(unusual)
,逗号也可以是可选的。但也不需要。
我使用以下正则表达式:/(?:\\[.*\\]\\s)?(?<name>.*?)(?:\\s\\([not|unusual].*?\\))?\\,/g
问题:
\n当我在逗号处使用可选参数时,?它将整个字符串拆分为单独的字符。
当我将组中的非贪婪选择更改name为贪婪选择时,可选逗号被分隔。但现在从 开始的示例字符串\xc3\xb6被选择到最后。
第一个标准括号内的字符串()可以以大写或小写开头。目前我只能识别大写字母。
这是我对 regex101 的尝试,其中包含一堆示例: https: //regex101.com/r/Lx2anw/1
\n很抱歉问了一个非常具体的问题,但我已经以我的知识结束了......
\n有人对我在这里可以做什么有什么建议吗?
\n您可以使用
^(?:\[.*?]\s)?(?<name>.*?)(?:\s\((?:not|unusual)[^()]*\))?,?\s*$
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示。
细节:
^- 字符串的开头(?:\[.*?]\s)?- 可选的序列[...]和空格(?<name>.*?)- 组“名称”:任何零个或多个尽可能少的字符(?:\s\((?:not|unusual)[^()]*\))?- 由空格、 、 或 组成的可选序列(,not然后unusual是零个或多个字符(除了(和之外) ),然后是一个)字符,?- 可选的逗号\s*- 零个或多个空格$- 字符串结尾您的模式与组 1 中的其余行相匹配,因为组名称后面的模式中的所有内容都是可选的。
请注意,您使用字符类[not|unusual],但如果您想匹配替代方案之一,则应该使用分组,例如(?:not|unusual)
您还可以匹配除括号或字符串末尾的逗号之外的任何字符。
然后匹配括号之间的可选部分。
^(?:\[[^\][\n]*\]\s)?(?<name>(?:(?!,\s*$)[^\n()])*(?:\([^()\n]*\))?)
Run Code Online (Sandbox Code Playgroud)
解释
^字符串的开头(?:\[[^\][\n]*\]\s)?可选匹配[...](?<name>团队名字
(?:非捕获组
(?!,\s*$)[^\n()]如果我们不查看尾随逗号,则匹配除( )或 换行符之外的任何字符)+关闭非捕获组并重复1次或多次以不匹配空行(?:\([^()\n]*\))?可选择匹配以下部分(...))关闭群组名称如果括号之间的第一部分不应以“not”或“异常”开头,您可以使用否定前瞻对其进行断言(?!not\b|unusual\b)
^(?:\[[^\][\n]*\]\s)?(?<name>(?:(?!,\s*$)[^\n()])+(?:\((?!not\b|unusual\b)[^()\n]*\))?)
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您将不想匹配的每个表达式作为单个非捕获组放置,它将起作用。你的表情会是这样的:
/(?:\[.*\]\s)?(?<name>.+?)(?:\s\(not \w+\))?(?:\s\(unusual\))?,?$/gm
Run Code Online (Sandbox Code Playgroud)
https://regex101.com/r/a7Qtvw/1
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |