当前位置: 首页 > 知识库问答 >
问题:

如何使用正则表达式按点拆分字母字符串?

米嘉禧
2023-03-14

我想按拆分字符串 如果其他字符仅按字母顺序排列,且字符串不以开头或结尾

因此,abc的预期结果。def。xyz将是[abc,def,xyz]

下面的字符串应该保持原样:abc.xy. a31a.ababc.def,xyz

基本上,我正在寻找一个更优雅的解决方案,我的当前代码:

if(canSplit(x)){
   var parts = x.split("\\.");
   ...
}

boolean canSplit(String text) {
    if(text.startsWith(".") || text.endsWith(".")) return false;
    
    for(var s : text.split("\\.")) {
        for(int i = 0; i < s.length(); i++) {
            if(!Character.isAlphabetic(s.charAt(i))) return false;
        }
    }
    return true;        
}

共有2个答案

曹华荣
2023-03-14

你的衣服没问题。但是如果你想使用regex,你的canSplit方法可以如下所示:

boolean canSplit(String text) {
    String regex = "[a-z]+(?:\\.[a-z]+)+";
    return text.matches(regex);
}
沈栋
2023-03-14

您可以使用此正则表达式并抓取捕获的组#1

(?:^(?=\p{L}+(?:\.\p{L}+)+$)|(?!^)\G\.)(\p{L}+)

正则表达式演示

细节:

  • (?=\p{L} (?:\.\p{L} ) $)确保我们只在一行中使用点分隔的字母
  • \G断言上一场比赛结束时的位置或第一场比赛的字符串开始时的位置
  • (?! ^)确保我们在开始时不允许\G匹配

Java代码:

jshell> String str = "abc.def.xyz";
str ==> "abc.def.xyz"

jshell> String re = "(?:^(?=\\p{L}+(?:\\.\\p{L}+)+$)|(?!^)\\G\\.)(\\p{L}+)";
re ==> "(?:^(?=\\p{L}+(?:\\.\\p{L}+)+$)|(?!^)\\G\\.)(\\p{L}+)"

jshell> Pattern.compile(re, Pattern.MULTILINE).matcher(str).results().flatMap(mr -> IntStream.rangeClosed(1, mr.groupCount()).mapToObj(mr::group)).collect(Collectors.toList());
$6 ==> [abc, def, xyz]
 类似资料:
  • 问题内容: 我有一个字符串,需要根据出现的“,”(逗号)进行拆分,但是需要忽略在一对括号内出现的任何字符串。例如, 应拆分为 问题答案: 对于非嵌套 嵌套 (括号内的括号)

  • 问题内容: 我是regex的新手,我想做的是在特定条件下拆分String,但我不知道该怎么做。 这是样品/条件 我希望字符串被拆分,,,,,, 这可能吗? 问题答案: 如果 确实 需要使用正则表达式,则可能应该使用环顾四周机制,因为您不想 在 此字符 之前 或 之后 进行拆分。 输出:

  • 上下文:我需要拆分太长的字符串,这些字符串用作html表中的列标题。这些字符串是变量名,因此它们中没有空格。 如果让css属性执行此操作,则字符串将在固定位置拆分,而不是使用字符串中的点或。 例如,假设我有以下字符串: 使用点作为分隔符,我可以用很多很多不同的方法来分割它。但我提出了以下指导原则: 所有子串必须为12个字符或更少 分隔符[。_]应该在子字符串的末尾,而不是开头 子串的数量必须最小

  • 问题内容: 我有一个字符串,我想使用regex表达式拆分此字符串,以便该函数返回数组: 我将如何使用Swift进行此操作? 编辑 我的问题不同于链接的问题。我意识到您可以使用迅速拆分字符串。问题是该问题没有解决如何制作正则表达式的问题。我尝试使用,但是没有用。 如何使该部分成为正则表达式? 问题答案: Swift到目前为止还没有本地正则表达式。但提供。 运行此将输出

  • 我有一个表格形式的命令输出。我正在解析结果文件的输出并将其存储在字符串中。一行中的每个元素由一个或多个空格字符分隔,因此我使用正则表达式匹配1个或多个空格并拆分它。但是,在每个元素之间插入一个空格: 还有更好的方法吗? 每次拆分后,str2都会附加到列表中。

  • 使用Java和正则表达式,我想从一行文本中提取字符串。文本可以采用以下格式- 键1(值1)键2(值2) 当使用类型#1时,我能够成功地提取键和值,我可以使用空格分割文本,然后使用以下模式提取键 对于案例#2和案例#3,可以使用复杂的代码逻辑来计算“(”的出现,并将其与空格的出现相匹配,但是,代码变得太长了。当值中也存在空格时,会出现多种复杂情况,因为这样,分割文本就会出现问题。 有没有更好的正则表