匹配括号之间的整数

2024-01-08

我得到了一堆以下格式的字符串:

ASDF [         6]

ZXC[1]

OtPasd[ 4 ]

asdffa[   7]

我需要检索有效字符串的括号之间的整数。只要满足以下条件,字符串就有效:

  1. 括号之间仅存在空格。即:“ZXCV[ a2]”无效
  2. 所有支架均已正确关闭。即:“qwr[2”无效
  3. 所有字符串都只有一个左/右括号。即:“zxcf[4]]]”无效

我最好避免使用正则表达式,因为我得到了大量的字符串,所以计算不密集的东西会更好。

什么是最干净、最干净的fastest验证和检索整数的方法?

编辑:我决定使用正则表达式。


在我个人看来,最干净的解决方案是使用正则表达式。但与其猜测它是否是计算密集型的,我宁愿对其进行基准测试。这是代码。

const int Count = 10000000;
const string testString = "<whatever>";

// Solution No. 1: use Regex.Match()    
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < Count; i++)
{
    var match = Regex.Match(@"\[\s*(\d+)\s*\]$", testString);
    if (!match.Success)
        continue;
    var number = int.Parse(match.Groups[1].Value);
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);

// Solution No. 2: use IndexOf() and Substring() shenanigans
sw.Start();
for (int i = 0; i < Count; i++)
{
    var lb = testString.IndexOf('[');
    var rb = testString.LastIndexOf(']');
    if (lb < 0 || rb != testString.Length - 1)
        continue;
    var str = testString.Substring(lb + 1, rb - lb - 1);
    int number;
    if (!int.TryParse(str, out number))
        continue;
    // use the number
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);

结果如下:

Solution  |  testString  |   Time (ms)  | Comment
----------|--------------|--------------|-----------------------
     1    | abc [      ] |    4476      | Invalid input string
     2    | abc [      ] |    6594      | Invalid input string
     1    | abc[1234]    |    4446      | Valid input string
     2    | abc[1234]    |    6290      | Valid input string

正如您所看到的,正则表达式解决方案不仅更短、更清晰,而且实际上更快。如果您使用不同的输入字符串,您会发现输入字符串越长,第一个解决方案和第二个解决方案之间的差距就越大。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

匹配括号之间的整数 的相关文章

  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 如何在 Swift 2.0 中使用 stringByAddingPercentEncodingWithAllowedCharacters() 作为 URL

    我在 Swift 1 2 中使用过这个 let urlwithPercentEscapes myurlstring stringByAddingPercentEscapesUsingEncoding NSUTF8StringEncoding
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • 创建 WCF 消息的缓冲副本

    我在消息检查器中有以下代码来检查响应正文 我知道 WCF 消息只能读取一次 因此我首先创建一个副本 但使用以下代码我仍然收到错误 此消息无法支持该操作 因为它已被读取 我错过了什么吗 MessageBuffer buffer message
  • Firefox 扩展自定义字体

    我正在使用 Firefox Add on SDK 创建扩展并执行 PageMod 这段代码位于main js exports main function var pageMod require sdk page mod pageMod Pa
  • django-allauth:模块“accounts.forms”未定义“SignupForm”类

    我收到以下错误 django core exceptions ImproperlyConfigured 模块 accounts forms 没有定义 SignupForm 类 设置 py ACCOUNT SIGNUP FORM CLASS
  • 动态设置错误动作的布局文件

    我知道有不同的方法来选择布局文件 可以办到 在配置中 with Yii app gt layout with Controller layout 我有一些使用不同布局文件的控制器 如下所示 class FirstController ext
  • 我应该模拟与我的测试对象交互的所有对象吗?

    我正在努力知道如何决定应该模拟与我的测试对象交互的哪些对象 class MyClass private Customer customer private Invoice invoice private PrintService ps pr
  • 在 .NET 中初始化空变量

    在 NET 中初始化 null 变量的正确方法是什么 我的一位同事告诉我 将变量硬定义为 null 会降低速度 int var1 good practice string s1 good practice int var2 0 bad pr
  • 如何使用 Java HttpServer/HttpExchange 获取 GET 中的查询字符串?

    我正在尝试用 Java 创建一个简单的 HttpServer 来处理 GET 请求 但是当我尝试获取请求的 GET 参数时 我注意到 HttpExchange 类没有相应的方法 有人知道读取 GET 参数 查询字符串 的简单方法吗 这就是我
  • NgStyle 返回:ERROR 错误:找不到不同的支持对象 '{"background-color":"blue"}'

    在我的模板中使用这个 span HELLO span 在我的组件中 myStyle string return background color blue 我越来越 ERROR Error Cannot find a differ supp
  • css 过渡不透明度淡入淡出背景

    我正在做一个transition当用户将鼠标悬停在图像上时 它会淡入透明白色 我的问题是我需要将颜色更改为黑色 我尝试过简单地添加background black 到包含的类transition 但不幸的是它不起作用 它仍然褪成白色透明 我
  • 是否可以继承 C++11 智能指针并覆盖相关运算符?

    根据cppreference com http en cppreference com w cpp memory shared ptr std shared ptr提供了一整套相对运算符 出于某些目的 我更希望使用相对运算符来根据比较引用的
  • 如何从html图像标签获取class和src

    我想检索课程并src使用正则表达式的图像标签 的位置class and src可以在任何地方 我能够得到src from
  • Jasmine angularjs - 监视控制器初始化时调用的方法

    我目前正在使用 Jasmine 与 Karma Testaulous 和 Web Storm 来编写单元测试 我在监视控制器初始化时立即调用的方法时遇到问题 是否可以监视控制器初始化时调用的方法 我的控制器代码 我试图监视的方法是getSe
  • 按下按钮后如何提示用户授予推送通知权限?

    I read 如何控制何时在 iOS 中提示用户推送通知权限 https stackoverflow com questions 30817069 how to control when to prompt user for push no
  • STL 容器 - 矢量、列表和双端队列之间的区别

    如果我想将元素也推入容器的开头 我应该使用双端队列而不是向量吗 我什么时候应该使用列表以及它的意义是什么 Use deque如果您需要在序列的开头和结尾以及随机访问时进行高效的插入 删除 使用list如果您需要在任何地方进行高效插入 而牺牲
  • 如何通过puppeteer获取嵌入页面的pdf?

    我正在尝试获取一个页面的 pdf 副本 其结构如下 我尝试用page pdf但我得到了一个空白的pdf 中间写着 无法加载插件 对于其他偶然发现这个问题的人来说
  • 如何更改 IPython %pdb 和 %debug 调试器?

    默认情况下 ipython 使用 ipdb 作为带有 pdb 或 debug 魔法的调试器 但是 我更喜欢 pdb 有没有办法更改用这些魔法调用的调试器 我知道我可以简单地在 pdb 的异常情况下使用 pdb xpm 但我想让它与 ipyt
  • 如何在Rstudio中运行python脚本

    我对如何从 Rstudio 运行 python 脚本有疑问 我最初的想法是从 GitHub 存储库获取 python 脚本 然后在 R 中运行它 我通过使用获取了 python 代码script lt getURL URL ssl veri
  • android - 启动屏幕上的进度条

    我的应用程序在加载时显示启动屏幕 我想在启动屏幕上的图标下方放置一个动画进度条 我尝试使用 XML 但它崩溃了 说无效标签进度条 这是我在 styles xml 中调用启动屏幕的代码 这是我的background splash xml 文件
  • Elixir:更新地图列表中的特定值

    给出以下地图列表 ball prop list id gt cue is idle gt true velocity x gt 0 0 velocity z gt 0 0 x gt 15 0 z gt 0 0 id gt ball 1 is
  • 匹配括号之间的整数

    我得到了一堆以下格式的字符串 ASDF 6 ZXC 1 OtPasd 4 asdffa 7 我需要检索有效字符串的括号之间的整数 只要满足以下条件 字符串就有效 括号之间仅存在空格 即 ZXCV a2 无效 所有支架均已正确关闭 即 qwr