java中如何取得特定字符前的字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中如何取得特定字符前的字符串相关的知识,希望对你有一定的参考价值。
现有一个邮箱地址
String email = "****@163.com";
如何将邮箱的用户名****和他的邮箱类型(163)截取出来分别放在一个字符串里
String str = "sdfs#d";
str.substring(0, str.indexOf("#"));
//输出的结果为:sdfs
//indexOf返回的索引也是从0开始的,所以indexOf("#") = 4。
//java中的substring的第一个参数的索引是从0开始,而第二个参数是从1开始 参考技术A /**
* 保证邮箱地址正确提前下,取得邮箱地址的用户名和域名字符串
* @author 极乐鸟jileniao.net
* @version 01-00
* @since 01-00
*/
public class test
public static void main(String args[])
// 定义邮箱地址的字符串
String mail = "i@jileniao.net";
// 使用split() 方法把 @ 号左右部分分开并保存到数组中
String[] tmp = mail.split("@");
// 数组第一个元素就是邮箱用户名
String mailName = tmp[0];
// 数组第二个元素就是邮箱域名
String mailDomain = tmp[1];
极乐鸟回答。
参考资料:http://jileniao.net
参考技术B 使用正则表达式^(?<UserName>\w+)@(?<MailType>\w+)\.\w+$
然后把UserName,MailType返回值提取中来就行了,Java中具体关于正则表达式的操作方法,你可以上网搜一下! 参考技术C String name = email.substring(0,email.indexOf("@"));
String type = email.substring(email.indexOf("@") + 1 , email.indexOf("."));
System.out.println(name + " " + type );本回答被提问者采纳 参考技术D
String str = "房估字(2014)第YPQD0006号";
String jieguo = str.substring(str.indexOf("第")+1,str.indexOf("号"));
使用 RegEx 忽略分隔符前的特定字符
【中文标题】使用 RegEx 忽略分隔符前的特定字符【英文标题】:Ignore specific characters before a delimiter with RegEx 【发布时间】:2022-01-22 03:02:30 【问题描述】:我正在尝试创建两个正则表达式来捕获欧洲车牌所需的字符。
重要的是要提一下
将 国家 与其他国家/地区(第一个字母)分开的分隔符始终是* (asterisk) or a - (hyphen)
分隔 区 与右侧其他字符的分隔符始终为 a - (hyphen)
区还可以包含ä,ö,ü等字母
车牌如下所示:
A*S-XXXPA
A*SL-XXXPC
A*SL-XXXSD
A*HA-XXXHV
D*R-XXXXX
D*TS-XXXXX
A*VB-1XXXXX
我用来捕捉国家和地区的正则表达式如下。
String country = "^([A-Z]1,3)";
String district = "\\h*(\\pL1,3)[-*]";
一旦我从我的字符串中获得了所需的信息,我就会使用 java 代码删除我不需要的信息,这是代码片段:
if (matcher.find())
country_region = matcher.group(1);
country_region = country_region.replace("*", "");
country_region = country_region.replace("-", "");
country_region = country_region.replaceAll("\\s+$", "");
我捕获国家/地区的正则表达式工作正常,这是一个示例:
https://regex101.com/r/jfhSJN/1我遇到麻烦的是我用来捕获地区的 RegEx。目前它还赶上了国家...
https://regex101.com/r/57ZE9O/1我想我可以删除 RegEx 末尾的星号,但我认为这不是最干净的方法。
谢谢!
【问题讨论】:
【参考方案1】:地区正则表达式的主要问题是\h*
匹配任何零个或多个水平空格。所以匹配也可以出现在字符串的开头。
由于您想在水平空格后得到匹配,*
或 -
,您可以使用
[*\h-](\pL1,3)[-*]
请参阅regex demo。这里,[*\h-]
匹配 *
、水平空格或 -
字符。
但是,在将所有部分捕获到组中时,使用正则表达式来匹配搅拌是有意义的:
^([A-Z]1,3)[\h*-](\pL1,3)[-*](.+)
见this regex demo。 详情:
^
- 字符串开头
([A-Z]1,3)
- 第 1 组:一个、两个或三个大写字母
[\h*-]
- 水平空格,*
或 -
(\pL1,3)
- 第 2 组:一到三个任意 Unicode 字母
[-*]
- -
或 *
字符
(.+)
- 第 3 组:直到字符串/行结尾的所有文本。
【讨论】:
嗨@Wiktor Stribiżew - 非常感谢您的精彩解释和回答。就我而言,我明确希望在没有组的情况下工作,以防止 Java 代码发生变化。仅对地区来说可能吗? @Djabone 是的,请参阅(?<=[*\h-])\pL1,3(?=[-*])
demo here。
如果我做得好,请告诉我好吗? (?<=[*\h-]) positive lookbehind - searches for - but only if there's a * before it? \pL1,3 matches any letter from any language between 1 and 3 characters. ?=[-*] lost me here
。非常感谢您的帮助
@Djabone No. (?<=[*\h-])
- 需要*
或-
或hor 的正向前瞻。当前位置左侧的空格。您正确理解\pL1,3
。 (?=[\h-])
是一个积极的前瞻,需要一个 hor.空格或-
紧挨当前位置的右侧。以上是关于java中如何取得特定字符前的字符串的主要内容,如果未能解决你的问题,请参考以下文章
oracle中如何截取字符串中,某个字符前的字符串? 例如截取字符串210-1106000001中“-”前的字符串?