我有一个字符串,像这样:
{"content":(uint32)123", "id":(uint64)111, "test":{"hi":"(uint32)456"}}
我想得到结果:
(uint32)123
(uint64)111
所以我写这样的正则表达式:
[^(?!\")](\(uint32\)|\(uint64\))(\d)+[^(?!\")$]
但结果是:
:(uint32)123
:(uint64)111,
此处结果添加了:
和,
我希望正则表达式不是以"
开头,而是以"
结尾,现在我应该如何更改我的正则表达式?
答案 0 :(得分:0)
(\(uint(?:32|64)\)\d+)
适合我。它捕获整个字符串(uint[32/64])<any number of digits\>
,而不会打扰之前或之后出现的字符。
答案 1 :(得分:0)
看起来你正试图使用负向前瞻和负面的后视检查。但你犯了几个错误:
[^(?!\")]
这个正则表达式的真正含义 - 不是方括号内的任何符号(^ - 代表不是)。它应该如何:(?!\")
- 当前位置后的符号不应该引用(注意:如果在(?<!some_regexp)
。所以它会是(?<!\")
以下是没有行开始/结束检查的更正示例:
(?<!\")(\(uint32\)|\(uint64\))(\d)+(?!\")(?!\d)
注意:您需要在末尾添加(?!\ d),否则如果有引号则会匹配除最后一位之外的所有内容。
以下是行检查开始/结束的示例:
(?<!^)(?<!\")(\(uint32\)|\(uint64\))(\d)+(?!\")(?!\d)(?!$)
P.S。:取决于您使用的语言 - 您可能不需要转义引号 - 只有在它是字符串转义序列而不是regexp转义序列时才需要转义引号。
答案 2 :(得分:0)
在python中测试了以下内容
(?<!\")(\(uint32\)|\(uint64\))\d+(?!(\"|\d))