如何在第一个选项卡实例之后删除所有字符?
Posted
技术标签:
【中文标题】如何在第一个选项卡实例之后删除所有字符?【英文标题】:How can I remove all characters after the first instance of a tab? 【发布时间】:2018-05-31 08:15:13 【问题描述】:我有一个很大的文本文件,大约有 200,000 行单词翻译。我想保留标签后显示的翻译文本。
abaxial van osovine
abbacy opatstvo
abbaino kora
abbatial opatski
abbe opat
abbé opat
abbé sveæenik
hematological parameters hematološki pokazatelji
如何在标签的第一个实例之前去除所有字符?
【问题讨论】:
text.split("\\s2\\s*")
@MartinErlic 这很奇怪,因为\t
不是空格。也许您的问题应该是:“如何删除第一个 tab 字符之前的所有文本?”。或者最后,正如您的代码 sn-p 所做的那样。
@MartinErlic 那么也许您应该在尝试操作数据之前弄清楚数据是什么。使用一个好的文本编辑器来显示空格和制表符,例如Notepad++.
困惑!!!问题标题“删除标签之后的所有字符”。问题文本:“去掉 之前两个空格的所有字符”。它是制表符还是2个空格?是需要删除之前还是之后的文本?
如果问题与空格无关,请编辑问题文本以反映这一点。
【参考方案1】:
您可以使用这个正则表达式来匹配翻译前的所有内容:
.+? 2,
在线尝试这个正则表达式:https://regex101.com/r/P0TY1k/1
使用此正则表达式在您的字符串上调用 replaceAll
。
yourString.replaceAll(".+? 2,", "");
编辑:如果分隔符不是 2 个空格而是一个制表符,你可以试试这个正则表达式:
.+?(?: 2,|\t)
【讨论】:
对不起,很好的答案,但问题是错误的,“2个空格”实际上是一个制表符。见comment to question。 @Andreas 已编辑。 问题说“第一个实例...”,那么正则表达式不应该以.+?
开头吗?使用 greedy quantifier 之类的 .+
,它将替换所有直到 last 实例,而不是第一个实例。像.+?
这样的reluctant quantifier 将在第一时间停止。
@Andreas 我看到原始/翻译对都在不同的行中,所以这不会有什么不同吗?还是编辑了。【参考方案2】:
所以你可以使用正则表达式来非常有效地处理字符串。
导入 java.util.regex.Matcher; 导入 java.util.regex.Pattern;
公共类主
/**
* Splits the line related to translation into 2 groups by splitting it on
* two spaces " " and storing the splits into two named groups (key,
* value)</br>
* Group1 (key) is the text before the two spaces.</br>
* Group2 (value) is the text after the two spaces.</br>
*/
private static final Pattern TRANSLATION_PATTERN = Pattern.compile("<key>.*)\\s\\s+(<value>.*)");
public static String grabTextAfterTwoSpaces(String input)
Matcher matcher = TRANSLATION_PATTERN.matcher(input);
/*
* You have to call .matches() for the regex to actually be applied.
*/
if (!matcher.matches())
throw new IllegalArgumentException(String.format("Provided input:[%s] did not contain two spaces", input));
return matcher.group("value");
public static void main(String[] args)
System.out.println(grabTextAfterTwoSpaces("abaxial van osovine"));
System.out.println(grabTextAfterTwoSpaces("abbacy opatstvo"));
System.out.println(grabTextAfterTwoSpaces("abbaino kora"));
System.out.println(grabTextAfterTwoSpaces("abbatial opatski"));
System.out.println(grabTextAfterTwoSpaces("abbe opat"));
System.out.println(grabTextAfterTwoSpaces("abbé opat"));
System.out.println(grabTextAfterTwoSpaces("abbé sveæenik"));
System.out.println(grabTextAfterTwoSpaces("abbacy opatstvo"));
System.out.println(grabTextAfterTwoSpaces("hematological parameters hematološki pokazatelji"));
Try it online!
因此,如果您对组使用“值”,您将获得 2+ 个空格之后的所有内容。
枇杷
opatstvo
可乐
奥帕茨基
奥帕特
奥帕特
sveæenik
opatstvo
hematološki pokazatelji
【讨论】:
对不起,很好的答案,但问题是错误的,“2个空格”实际上是一个制表符。见comment to question。以上是关于如何在第一个选项卡实例之后删除所有字符?的主要内容,如果未能解决你的问题,请参考以下文章
当使用angular8单击选项卡时,如何使选项卡聚焦在第一个字段上
如何从我的 XCODE 上的另一个选项卡更改 UILabel 值