使用起始字符串和结束字符串从长字符串中提取子字符串?

2024-05-13

我有这个长字符串(它是一个长的连续字符串):

Home address H.NO- 12 SECTOR- 12 GAUTAM BUDH NAGAR NOIDA- 121212, UTTAR PRADESH INDIA +911112121212 Last Updated: 12-JUN-12 Semester/Term-time Accommodation Type: Hall of residence (private provider) Semester/Term-time address A121A SOME APPARTMENT SOME LANE CITY COUNTY OX3 7FJ +91 1212121212 Last Updated: 12-SEP-12 Mobile Telephone Number : 01212121212

如果查看上面的字符串,可以生成以下模式:

<home_address_text><space><the_address><space><last_updated_text><last_updated_date><space><accomodation_t‌​ype_text><accomodation_type><space><semester_time_address_text><semester_time_address><space>last_updated_text><last_updated_date><space><mobile_number_text><mobile_number>

我想提取该字符串的特定部分,例如: 1. H.NO- 12 SECTOR- 12 GAUTAM BUDH NAGAR NOIDA- 121212, UTTAR PRADESH INDIA 2. Hall of residence (private provider) 3. A121A SOME APARTMENT SOMELANE CITY COUNTY OX3 7FJ 4. 01212121212

这些信息是可变的,所以它因人而异,所以我不能只计算长度并使用子字符串来提取它,因为整个字符串和我想要提取的部分的长度是可变的。

如何使用 Java 提取字符串的特定部分(如上所述)?我长期以来一直在寻找方法,但找不到方法。任何帮助将非常感激


根据您的(单个)示例,这对我有用。学习使用不情愿的修饰语 http://www.regular-expressions.info/repeat.html对于正则表达式。在这种情况下他们会给你很多帮助。

例如,要获取与第一部分匹配的字符串:"Home address (.+?) \+\d+ Last Updated:这个正则表达式不会跳过我们不想要的“Last Updated”字符串或“+dd”(数字)。正则表达式“(.+?)”是不情愿的(不是贪婪的),并且不会跳过+号或数字,使它们与表达式的其余部分匹配。

您可以使用它来匹配静态文本包围的正则表达式中的子字符串。在这里,我使用捕获组来定位我想要的文本。 (捕获组是括号中的部分。)

class Goofy
{

   public static void main( String[] args )
   {
      final String input
              = "Home address H.NO- 12 SECTOR- 12 GAUTAM BUDH NAGAR " +
              "NOIDA- 121212, UTTAR PRADESH INDIA +911112121212 " +
              "Last Updated: 12-JUN-12 Semester/Term-time " +
              "Accommodation Type: Hall of residence (private " +
              "provider) Semester/Term-time address A121A SOME " +
              "APPARTMENT SOME LANE CITY COUNTY OX3 7FJ +91 " +
              "1212121212 Last Updated: 12-SEP-12 Mobile Telephone " +
              "Number : 01212121212";

      final String regex = "Home address (.+?) \\+\\d+ Last Updated: " +
              "\\S+ Semester/Term-time Accommodation Type: (.+?) " +
              "Semester/Term-time address (.+?) \\+\\d\\d \\d+ " +
              "Last Updated.+ Number : (\\d+)";

      Pattern pattern = Pattern.compile( regex );
      Matcher matcher = pattern.matcher( input );
      if( matcher.find() ) {
         System.out.println("Found: "+matcher.group() );
         for( int i = 1; i <= matcher.groupCount(); i++ ) {
            System.out.println( "   Match " + i + ": " + matcher.group( i ));
         }
      }
   }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用起始字符串和结束字符串从长字符串中提取子字符串? 的相关文章

随机推荐

  • Spring REST 控制器中带有 RequestBody 的 XML/JSON POST

    我正在使用 Spring 3 0 创建一个 RESTful 网站 我在用ContentNegotiatingViewResolver以及 HTTP 消息转换器 例如MappingJacksonHttpMessageConverter对于 J
  • JavaScript 中的可选参数

    如果缺少剩余参数 为什么该函数不会抛出错误 showStatistics Mark Teixeira New York Yankees 1st Base 这是定义的函数 function showStatistics name team p
  • Google 操作面板中缺少配置撤销令牌 URL 的选项

    在 Google Actions 面板中 我们可以启用帐户链接 我们还可以指定授权 URL 支持 OAuth2 代码或隐式流的登录网页的端点 和令牌 URL 用于令牌交换的 OAuth2 端点 端点配置镜像 https i stack im
  • 修饰符 async 对此项目无效

    这似乎并不是数百个具有相同错误的其他问题的重复 我把它们都看过了 发现它们是无关的 我正在制作一个小笔记应用程序 并尝试从目录中读取文件 按照 MSDN 示例 我有以下代码 但它给了我一个错误 错误 1 修饰符 async 对此无效 项目
  • 苹果游戏中心 API

    我无法找到包含 Game Center Reference 的 GameKit api Apple Game Center 是 iOS 上的一个新社交网络平台 其描述如下 iOS4 中的新增功能 1 GameKit iOS 参考在这里 ht
  • 如何使用 CSS 或 javascript 创建圆角

    复制 使用 CSS 创建圆角的最佳方法是什么 https stackoverflow com questions 7089 what is the best way to create rounded corners using css 7
  • 如何为 apscheduler 指定“记录器”

    我正在尝试学习如何使用 Python 的 apscheduler 包 但它会定期抛出以下错误 No handlers could be found for logger apscheduler scheduler 该消息似乎与计划作业中的错
  • Codeigniter 分页:运行查询两次?

    我正在使用 codeigniter 和分页类 这是一个非常基本的问题 但我需要确保我没有遗漏任何东西 为了获得对从 MySQL 数据库获取结果进行分页所需的配置项 基本上需要运行查询两次 对吗 换句话说 您必须运行查询来确定记录总数 然后才
  • Python:按条件绘制多个正/负条形图

    这是我第一次用 python 绘制条形图 我的 df 操作 key descript score 0 noodles taste 5 1 noodles color 2 2 noodles health 3 3 apple color 7
  • std::map 只读操作的线程安全

    我有一个 std map 用于将值 字段 ID 映射到人类可读的字符串 当我的程序在任何其他线程启动之前启动时 该映射会被初始化一次 之后就不会再被修改 现在 我为每个线程提供了这个 相当大的 映射的自己的副本 但这显然是内存使用效率低下
  • Moshi 无法解析 nullable

    你好 希望你能帮助我 使用 kotlin Retrofit2 moshi 我从 https api spacexdata com v3 launches 获取数据并解析它 一切都很顺利 我得到的属性如下 flight number miss
  • Mediaplayer 播放几次后停止播放

    我有一个按钮 按下它会播放一个随机声音剪辑 然后播放另一个声音剪辑 然后通过一个媒体播放器播放另一个声音剪辑 但是多次按下该按钮 15 20 次 后 所有音频都会停止 我在播放最后一个音频剪辑后释放媒体播放器 所以我不认为这是原因 有什么指
  • 为什么在这种情况下括号无法更改 C++ 运算符优先级?

    这是我的简单代码 int main int x 5 cout lt lt x lt lt endl return 0 上面的代码打印5 不是 6 即使有括号 我的想法是 x x 1 在打印之前先执行 谁能向我解释一下这是怎么回事 谢谢 编辑
  • INT_MIN % -1 是否会产生未定义的行为?

    gcc 生成浮动代码 引发SIGFPE对于以下代码 include
  • 用于 mvc3 日期格式和日期验证的文本框

    我决定开始使用 MVC 3 并且在尝试将我的一个 Web 应用程序重做为 MVC3 时遇到了这个问题 我的项目是这样设置的 public class Project public int ProjectID get set Required
  • 无法在 iOS UIWebView 中加载完整的 Facebook 评论插件

    我有一个简单的ViewController在 UIWebView 中加载 FB 评论插件 implementation ViewController void viewDidLoad super viewDidLoad UIWebView
  • 如何在 {expect} 脚本中创建“循环”语句?

    假设是 这是脚本 usr bin expect set a test 我想在这个脚本中创建一个循环 以便它可以打印值 a 前面有一个基于循环的数字 所以如果我想让它循环3次 最终产品将变成 1 test 2 test 3 test 您可以使
  • 具有 .NET Core 3.0 的 Azure Web 应用程序失败:找不到 Microsoft.AspNetCore.App

    我们尝试在升级到 NET Core 3 0 后部署我们的 Web 应用程序 但它不断收到 服务不可用 消息 如果我们尝试运行dotnet来自捻角羚 dotnet webapp dll 我们得到以下错误 It was not possible
  • 获取下一个ID而不插入行

    在 SQL SQL Server 中是否可以在插入行之前从表中的标识列检索下一个 ID 整数 而无需实际插入行 如果删除了最近的行 则这不一定是最高 ID 加 1 我问这个问题是因为我们偶尔需要用新行更新实时数据库 行的 ID 在我们的代码
  • 使用起始字符串和结束字符串从长字符串中提取子字符串?

    我有这个长字符串 它是一个长的连续字符串 Home address H NO 12 SECTOR 12 GAUTAM BUDH NAGAR NOIDA 121212 UTTAR PRADESH INDIA 911112121212 Last