2014-01-13 28 views
-1

給定一系列位,例如10100011110010101010001001010100用於非連續位1段的正則表達式

如何寫一個正則表達式來反映沒有1是鄰居的模式?

例如,010001001010100是一個不錯的選擇,但是10100011110010101不是因爲有1個相鄰。

編輯:

對不起我上面的語句可能會產生誤導。我不想檢查一個序列是否是非1相鄰的。我想使用正則表達式來查找所有非1鄰居。

假設我有一個非常孤立的一系列位,我想寫一個正則表達式來找出所有沒有1是鄰居的子序列。

+0

如何簡單地檢測不需要的情況並將其過濾掉? – Thomas

+0

這是否意味着該字符串不應該包含'11' _or_(用'1'開始並結束)? – devnull

+0

我們是在說零和一串字符串還是實際的位向量?例如。 01000001將是0x41或ASCII「A」。 – tripleee

回答

1

下面的正則表達式將匹配任何運行的零,其中任何嵌入的不與另一個相鄰。字符串開始/結尾的前導或尾隨也被接受。

(^1)?0+(10+)*(1$)? 

測試你的榜樣串產量:

bash$ grep -Eo '(^1)?0+(10+)*(1$)?' <<<10100011110010101 
101000 
0010101 

bash$ grep -Eo '(^1)?0+(10+)*(1$)?' <<<010001001010100 
010001001010100 
+0

與http://stackoverflow.com/a/21094703/759076比較,哪個更好? –

+0

他們非常相似,但@ hsz的答案是在您更改要求之前提交的,因此它與部分運行不匹配。 – tripleee

3

你可以用以下的正則表達式嘗試:

^0*(10+)*1?$ 
+0

@ C.B。好的,我編輯過了。我知道恢復正則表達式會更簡單,但我舉例說明。 :-) – hsz

+0

爲了解決更新後的需求,如果你把'^'改成'(^ 1)?'和'1?$'改成'(1?$)?',你就和我一樣。分組是不同的,但基本的想法是相同的。 – tripleee

3

簡單的 「11」,將是否存在相鄰兩個返回true。

問候

+0

對不起,我的上述說法可能會引起誤解。我不想檢查一個序列是否是非1相鄰的。我想使用正則表達式來查找所有非1鄰居。 –

0

搜索11+,即1隨後通過至少一個1

+0

假設我有一個非常孤立的一系列位,我想寫一個正則表達式來找出所有沒有1是鄰居的子序列。 –

+1

@JacksonTale例如在'10100011110010101'中,應該匹配什麼呢? – sp00m

0

您可以使用此,如果您正則表達式的味道支持lookarounds:

(?<!1)1(?!1) 

(?<!1):沒有1
(?!1)之前:緊隨其後1

如果您正則表達式的味道不支持lookarounds,你可以使用一個捕獲組和2個非捕獲組,而不是:

(?:^|0)(1)(?:0|$) 

(請注意,捕獲組是有用的只有當你想趕上的偏移具有適當功能的捕獲)

+0

對於10100011110010101' – Toto

+0

@ M42說這是真的:我知道但問題已被編輯。 OP「想使用正則表達式來查找所有非1鄰居」 –

相關問題